【发布时间】:2010-10-27 14:12:50
【问题描述】:
我知道无法重新启动使用过的 Java Thread 对象,但我找不到解释为什么这是不允许的;即使保证线程已经完成(参见下面的示例代码)。
我不明白为什么 start()(或至少是 restart())方法不能以某种方式将 Thread 对象的内部状态(无论它们是什么)重置为与 Thread 对象相同的值对象是新创建的。
示例代码:
class ThreadExample {
public static void main(String[] args){
Thread myThread = new Thread(){
public void run() {
for(int i=0; i<3; i++) {
try{ sleep(100); }catch(InterruptedException ie){}
System.out.print(i+", ");
}
System.out.println("done.");
}
};
myThread.start();
try{ Thread.sleep(500); }catch(InterruptedException ie){}
System.out.println("Now myThread.run() should be done.");
myThread.start(); // <-- causes java.lang.IllegalThreadStateException
} // main
} // class
【问题讨论】:
-
我的多线程技能不是太高级,但据我所知,没有(真正的)保证您的线程将在 500 毫秒内完成。它可能最终具有低优先级和等待,或者在某些更高级的情况下更糟的是锁定。话虽如此,我也认为这是一个有趣的问题,为什么不能重新启动状态为
TERMINATED的线程。 -
@posdef:示例代码只是为了演示问题。可以使用更精细的机制,等待
myThread.run()确定完成(或者接受在极少数情况下会引发异常)。 -
我不知道您在任何系统中可以重新启动线程。
标签: java multithreading