public class LiftOff implements Runnable {
protected int countDown = 10;// Default,倒数计数
/**
* 线程计数,java 中,当声明一个事物是static时, 表示这个事物,不会与包含它的那个类的对象关联
* 在一起,而是属于这个类。jvm中,执行new 创建 对象时,数据的存储空间才被分配。而static在 类被加载是就已经被执行了。
*/
private static int taskCount = 0;
private final int id = taskCount++;// 线程ID
public LiftOff() {
};
public LiftOff(int countDown) {
this.countDown = countDown;
}
public String status() {
return "#" + id + "(" + (countDown > 0 ? countDown : "LiftOff!") + ")";
}
public void run() {
while (countDown-- > 0) {
System.out.print(status());
Thread.yield();
}
}
}
public class MainThread {
public static void main(String[] args) {
for(int i=0;i<5;i++){
new LiftOff().run();
}
System.out.println("------");
for(int i=0;i<5;i++){
new Thread(new LiftOff()).start();
}
}
}
输出结果:
前一个for循环:
#0(9)#0(8)#0(7)#0(6)#0(5)#0(4)#0(3)#0(2)#0(1)#0(LiftOff!)
#1(9)#1(8)#1(7)#1(6)#1(5)#1(4)#1(3)#1(2)#1(1)#1(LiftOff!)
#2(9)#2(8)#2(7)#2(6)#2(5)#2(4)#2(3)#2(2)#2(1)#2(LiftOff!)
#3(9)#3(8)#3(7)#3(6)#3(5)#3(4)#3(3)#3(2)#3(1)#3(LiftOff!
)#4(9)#4(8)#4(7)#4(6)#4(5)#4(4)#4(3)#4(2)#4(1)#4(LiftOff!)
后一个for循环
#5(9)#5(8)#7(9)#5(7)#7(8)#5(6)#7(7)#6(9)#9(9)#8(9)#6(8)#8(8)#6(7)#8(7)#6(6)#8(6)#6(5)#8(5)#6(4)#8(4)#6(3)#8(3)#6(2)#8(2)#6(1)
#8(1)#6(LiftOff!)#8(LiftOff!)#5(5)#7(6)#7(5)#7(4)#7(3)#7(2)#7(1)#7(LiftOff!)#9(8)#5(4)#9(7)#5(3)#9(6)#5(2)#9(5)#5(1)#9(4)#5(LiftOff!)
#9(3)#9(2)#9(1)#9(LiftOff!)
可见,run方法并无特殊之处,他不会产生任何内在的线程能力,要实现线程行为,你必须显示的将一个任务附着到线程上。