我正在做scjp学习,我的问题如下:
public class Bunnies extends Thread{
public static void main(String[] args) {
Thread t = new Thread(new Bunnies());
Thread t1 = new Thread(new Bunnies());
t.start();
t1.start();
}
public void run()
{
for(int i=0; i<3; i++)
{
System.out.println(Thread.currentThread().getName()+" ");
}
}
}
当我运行上面的程序时,我得到的o/p如下:
Thread-1
Thread-1
Thread-1
Thread-3
Thread-3
Thread-3
我不明白为什么Thread-2不显示在这里,只显示Thread 1和Thread 3。
请解释一下。
发布于 2012-12-17 19:44:11
每次创建扩展Thread
的Bunnies
时,也会创建一个Thread
,因此数字之间存在差距。
您的第一次运行:Thread t = new Thread(new Bunnies());
。new Bunnies()
是Thread-0
,t
是Thread-1
。
然后运行Thread t1 = new Thread(new Bunnies());
。new Bunnies()
是Thread-2
,t1
是Thread-3
。
但是请注意,您不应该依赖线程编号,因为the javadoc不能保证这些编号是连续的。
您可以使用以下代码进行验证:
public static void main(String[] args) {
Bunnies b = new Bunnies();
Thread t = new Thread(b);
Bunnies b1 = new Bunnies();
Thread t1 = new Thread(b1);
System.out.println(b.getName()); //Thread-0
System.out.println(t.getName()); //Thread-1
System.out.println(b1.getName()); //Thread-2
System.out.println(t1.getName()); //Thread-3
}
发布于 2012-12-17 19:42:22
我不明白为什么
-2没有显示在这里,只显示了Thread1&3。
在抽象视图中,至少有5个线程:main
、t
和t1
。(和两个匿名线程)
class Bunnies extends Thread
因此,当您创建Bunnies
类的对象时,就会创建一个线程,并为它指定一个名称。
因为main
不会执行run
方法,匿名线程也不会启动,即不会调用start()
。只有t
和t1
会执行run
方法,因此你只能得到两个线程名。
命名顺序如下:
发布于 2012-12-17 19:43:15
好了,您有两个Bunnies
线程。这取决于运行时如何选择对它们进行命名。在您的示例中,它选择将它们称为Thread-1
和Thread-3
。大概是因为你继承了Thread
的子类,而不是Runnable
的子类。结果,您最终得到了四个线程对象,其中只有两个是作为单独的线程运行的。
如果您希望它们被称为其他名称,则可以使用Thread.setName()
方法。
https://stackoverflow.com/questions/13913424
复制相似问题