我正在嘗試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