跳到主要内容

2、创建线程的几种方式

一、通过继承Thread类创建线程类

1.步骤

1、 定义Thread类的子类FirstThread,并重写run()方法run()方法的方法体(线程执行体)就是线程要执行的任务;
2、 创建FirstThread类的实例;
3、 调用子类实例的star()方法来启动线程;

2.代码:

public class FirstThread extends Thread{    
private int i;
//重写run方法,
public void run(){
for(;i<1000 ;i++){
System.out.println(getName()+" "+i);
//之所以可以直接调用Therad类的getName()方法,是因为该类继承了Thread类
}
}

public static void main(String[] args) {
for(int i=0;i<100;i++){
//获取当前线程:这里是主线程
System.out.println("当前线程:"+Thread.currentThread().getName()+" "+i);
if(i == 20){
//启动第一个线程
new FirstThread().start();
//启动第二个线程
new FirstThread().start();
}

}

}
}

部分结果:

Thread-1   731
Thread-0 16
Thread-1 732
Thread-0 17
Thread-1 733
Thread-0 18
Thread-1 734
Thread-0 19

3.分析结果

从结果可以看出,第一个线程与第二个线程在交替运行。而且,我们可以发现,线程1的变量从i从731到734连续,而线程2从16到19连续。这说明,虽然 i 是FirstThread类的实例变量而非局部变量,但因为程序每次创建线程时,都会创建一个对象(new FirstThread),所以线程1与线程2不会共享 i 这个实例变量。