线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可能包括多个线程,在同一进程中的多条线程将共享该进程中的全部系统资源。所以当一个进程结束的时候,其所属的线程也会结束,但是当线程结束,进程不一定结束。

在Java语言中,从JDK1.0开始就有多线程,在多线程的实现上面有多种形式,本例以继承Thread类。

在继承java.lang.Thread类后,需要复写public void run()方法。其方法的主体也就是在启动线程之后所执行的方法体。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MyThread extends Thread {

private String threadName ;

public MyThread( String threadName) {
this.threadName = threadName;
}

@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(threadName + " - " + i );
}
}
}

有了多线程的方法,那么就需要启动我们的线程,在启动线程上需要调用Thread类的public void start()方法。只有在线程被启动后,JVM(java 虚拟机)才会去调用run方法,同一个线程只能启动一次。

测试

File : ThreadDemo.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.devnp;

/**
* Created by duliu on 24/8/2017.
*/

class MyThread extends Thread {

private String threadName ;

public MyThread( String threadName) {
this.threadName = threadName;
}

@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(threadName + " - " + i );
}
}
}

public class ThreadDemo {

public static void main(String[] args) {
MyThread myThread1 = new MyThread("Thread one");
MyThread myThread2 = new MyThread("Thread two");
MyThread myThread3 = new MyThread("Thread three");

//start Thread
myThread1.start();
myThread2.start();
myThread3.start();
}
}

在运行结果,会发现线程之间是交替输出,也就是每个线程在执行的时候根据资源的分配交替执行。