public class LiftOff implements Runnable { //实现Runnable接口
protected int countDown = 10; // Default
private static int taskCount = 0; // 不同线程个数的计数,,声明为static,则该变量位于heap中,不在该类的地址空间,因此可以做为全局计数
private final int id = taskCount++; //这里的id用来区分不同的线程,声明为final型
public LiftOff() {}
public LiftOff(int countDown) {
this.countDown = countDown;
}
public String status() { //返回该线程的状态信息,id为该线程标示,countDown则表示该线程被运行了多少次,
return "#" + id + "(" +
(countDown > 0 ? countDown : "Liftoff!") + "), ";
}
public void run() {
while(countDown-- > 0) { //线程每执行一次,计数countDown就被减1
System.out.print(status());
Thread.yield();
}
}
} ///:~
下面开始把写的这个runnable丢给Thread类来运行,Thread.start()方法会调用runnable.run方法
public class MoreBasicThreads {
public static void main(String[] args) {
for(int i = 0; i < 5; i++)
new Thread(new LiftOff()).start();
System.out.println("Waiting for LiftOff");
}
} /* Output: (Sample)
Waiting for LiftOff
#0(9), #1(9), #2(9), #3(9), #4(9), #0(8), #1(8), #2(8), #3(8), #4(8),
#0(7), #1(7), #2(7), #3(7), #4(7), #0(6), #1(6), #2(6), #3(6), #4(6),
#0(5), #1(5), #2(5), #3(5), #4(5), #0(4), #1(4), #2(4), #3(4), #4(4),
#0(3), #1(3), #2(3), #3(3), #4(3), #0(2), #1(2), #2(2), #3(2), #4(2),
#0(1), #1(1), #2(1), #3(1), #4(1), #0(Liftoff!), #1(Liftoff!),
#2(Liftoff!), #3(Liftoff!), #4(Liftoff!),
*///:~
线程交换执行,#0表示0号线程,