标题: 实现方式创建线程的文件,怎么打印出这个啊 [打印本页] 作者: 李创 时间: 2012-3-15 20:21 标题: 实现方式创建线程的文件,怎么打印出这个啊 class Demoextends extends Thread
{
private int x=10;
public void run()
{
while(x>0)
{
System.out.println(Thread.currentThread().getName()+" extends:"+x--);
}
}
}
class demo
{
public static void main(String[] argv)
{
Demoextends d1 = new Demoextends();
Demoextends d2 = new Demoextends();
d1.start();
d2.start();
d1.run();
d2.run();
}
}
---------- java ----------
main extends:10
main extends:8
main extends:7
main extends:6
main extends:5
main extends:4
main extends:3
main extends:2
main extends:1
main extends:9
main extends:8
main extends:7
main extends:6
main extends:5
main extends:4
main extends:3
main extends:2
main extends:1
Thread-0 extends:9
Thread-1 extends:10
没什么不对啊。
你创建了两个线程不假,但是还有默认的主线程。
当主线程执行到
Demoextends d1 = new Demoextends();
Demoextends d2 = new Demoextends();
创建了两个线程,然后执行
d1.start();
d2.start();
到这里时,俩线程都有了执行资格,但执行权还在主线程手里。然后主线程又继续执行到了
d1.run();
d2.run();
你这样执行run是不具备线程特性的,run这时只算是Demoextends类的一个普通的方法,只有调用start()方法才有线程特性。
这时run()执行的是里面的内容,由于主线程也是线程,所以你调用Thread.currentThread().getName打印出的是主线程的名字 ,还有x的值。也就是这块儿:
main extends:10
main extends:8
main extends:7
main extends:6
main extends:5
main extends:4
main extends:3
main extends:2
main extends:1
main extends:9
main extends:8
main extends:7
main extends:6
main extends:5
main extends:4
main extends:3
main extends:2
main extends:1
你建立了两个对象d1和d2,每个对象里都有一个10,所以减完就结束了。在执行期时,d1和d2线程也会抢夺CPU执行权,每次打印出的结果是不一样的。