Java 使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。每个线程的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码)。Java使用线程执行体来代表这段程序流。
public class FirstThread extends Thread {
private int i;
@Override
//重写run方法,run方法的方法体就是线程执行体
public void run() {
System.out.println("Hello,"+getName() + " " + i);
}
public static void main(String[] args) throws Exception{
for (int i = 0; i < 30; i++) {
//调用Thread的currentThread()方法获取当前线程
System.out.println(Thread.currentThread().getName() + " " + i);
if (i==2) {
//创建并启动第一个线程
new FirstThread().start();
//创建并启动第二个线程
new FirstThread().start();
}
}
}
}
上面程序中的FirstThread类继承了Thread 类,并实现了run方法,该run方法里的代码执行流就是该线程所需要完成的任务。虽然上面程序只显示的创建并启动了2个线程,但实际上程序有3个线程,即程序显示创建的2个子线程和主线程。当Java程序开始运行后,程序至少会创建一个主线程,主线程的线程执行体是由main方法确定的。
使用继承Thread类的方法来创建线程类时,多个线程之间无法共享线程类的实例变量。