我正在尝试java线程的isAlive()
方法的一个例子。但是我发现即使线程已经启动,isAlive()
方法也会返回false
。有人可以告诉我我做错了什么?这是代码片段。java线程的isAlive()方法无法正常工作?
package app;
public class ThreadAliveDemo {
public static void main(String[] args) {
Thread myThread;
myThread = new Thread()
{
public void run()
{
Thread.sleep(3000);
System.out.println("My Thread.");
}
};
myThread.setName("My Thread");
myThread.start();
if(!myThread.isAlive())
{
myThread.setName("My Thread");
myThread.start();
}
}
}
改为使用Thread.getState(),它提供了额外的信息。开始线程两次也没有效果。 – bestsss 2011-01-28 01:56:33
关于@bestsss建议:Brian Goetz的书“实践中的Java并发”说:“Thread.getState的结果不应该用于并发控制,并且对于测试的用处有限,它的主要用途是作为调试的来源信息。” – WoodenKitty 2016-07-01 00:21:33
@WoodenKitty,虽然一个线程还没有启动getState()会很稳定(可能需要与线程启动同步)。戈茨的建议非常稳固,但在这种情况下不适用。 – bestsss 2016-12-03 23:27:33