首先,按照线程的模型,一个具体的线程也是由虚拟的cpu
、代码与数据组成,其中代码与数据构成了线程体,线程体决定了线程到行为。虚拟的cpu是在创建线程时由系统自动封装进Thread
类到实例中,而线程体要应用程序通过一个对象传递给Thread
类的构造函数。Java中到线程体是由线程类的run()
方法定义,在该方法中定义线程的具体行为。线程开始执行时,也是从它的run()方法开始执行。
下面看一下Thread类的构造方法。1
public Thread(ThreadGroup group,Runnable target,String name);
其中group
是指明该线程所属的线程组;target
提供线程体的对象。java.lang.Runnable
接口中定义了run()方法。实现该接口的类的对象可以提供线程体,线程启动时该对象的run()方法将被调用;name线程名称。
言归正传,线程创建中,线程体的构造是关键。任何实现Runnable接口的对象都可以作为Thread类构造方法中的target参数,而Thread类本身也实现了Runnable接口,因此可以有两种方式提供run方法的实现:实现Runnable接口和继承Thread类。
通过实现Runnable接口创建线程
在java.lang中Runnable接口的定义为:1
2
3public interface Runnable{
void run();
}
使用这种方法创建线程的步骤是:
1.定义一个线程类实现Runnable接口,即在该类中提供run()方法的实现。
2.把Runnable的一个实例作为参数传递给Thread类的一个构造方法,该实例对象提供线程体run().
下面给一个简单的例子:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19public class ThreadTest {
public static void main(String args[]){
Thread t1 = new Thread( new Hello());
Thread t2 = new Thread(new Hello());
t1.start();
t2.start();
}
}
class Hello implements Runnable{
int i;
public void run(){
while(true){
System.out.println("Hello "+i++);
if(i == 5)
break;
}
}
}