通过继承Thread类来创建并启动多线程的步骤如下。

➊定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务。因此把run()方法称为线程执行体。

❷创建Thread子类的实例,即创建了线程对象。

❸调用线程对象的start()方法来启动该线程。

下面程序示范了通过继承Thread类来创建并启动多线程。

//通过继承Thread类来创建线程类
publicclassFirstThreadextendsThread
{
privateinti;
//重写run方法,run方法的方法体就是线程执行体
publicvoidrun()
{
for(;i<100;i++)
{
//当线程类继承Thread类时,可以直接调用getName()方法来返回当前线程的名。
//如果想获取当前线程,直接使用this即可
//Thread对象的getName返回当前该线程的名字
System.out.println(getName()+" "+i);
}
}
publicstaticvoidmain(String[]args)
{
for(inti=0;i<100;i++)
{
//调用Thread的currentThread方法获取当前线程
System.out.println(Thread.currentThread().getName()+" "+i);
if(i==20)
{
//创建、并启动第一条线程
newFirstThread().start();
//创建、并启动第二条线程
newFirstThread().start();
}
}
}
}

运行实例 »

上面程序中的FirstThread类继承了Thread 类,并实现了run()方法,如程序中第一段粗体字代码所示,该run()方法里的代码执行流就是该线程所需要完成的任务。程序的主方法中也包含了一个循环,当循环变量i等于20时创建并启动两个新线程。你可以点击上面的运行按钮。虽然上面程序只显式地创建并启动了2个线程,但实际上程序有3个线程,即程序显式创建的2个子线程和主线程。前面已经提到,当Java程序开始运行后,程序至少会创建一个 主线程,主线程的线程执行体不是由run(0方法确定的,而是由main0方法确定的一main0方法的方法体代表 主线程的线程执行体。

注意

1.进行多线程编程时不要忘记了Java程序运行时默认的主线程, main()方法的方法体就是主线程的线程执行体。

2.使用继承Thread类的方法来创建线程类时,多个线程之间无法共享线程类的实例变量。

除此之外,上面程序还用到 了线程的如下两个方法。

➢Thread.currentThread(): currentThread()是 Thread类的静态方法,该方法总是返回当前正在执行的线程对象。

➢getName(): 该方法是Thread类的实例方法,该方法返回调用该方法的线程名字。

程序可以通过setName(String name)方法为线程设置名字,也可以通过getName()方法返回指定线程的名字。在默认情况下,主线程的名字为main, 用户启动的多个线程的名,字依次为Thread-0. Thread-1. Thread-2. ….. Thread-n等。