java thread - 为什么要允许停止新线程

时间:2013-11-14 11:05:47

标签: java multithreading

我对以下陈述有疑问

  

当一个线程是一个新线程时,它只是一个空的Thread对象。没有   系统资源已经分配给它。当一个线程进入时   这种状态,你只能启动线程或停止它。打电话给任何人   除了在线程处于此状态时启动或停止的方法没有   感觉并导致IllegalThreadStateException

为什么java允许停止一个甚至没有启动的线程......在哪种情况下,必须调用stop()和一个新线程?

2 个答案:

答案 0 :(得分:0)

首先不要使用标记为deprecated的函数。

由于documentation表示停止,

  

允许停止尚未启动的线程。如果线程最终启动,它会立即终止。

此外,如果我查看Stop的{​​{1}}是

 @Deprecated
 public final void stop() {
     // If the thread is already dead, return.
     // A zero status value corresponds to "NEW".
     if ((threadStatus != 0) && !isAlive()) {
         return;
     }
     stop1(new ThreadDeath());
 }

从代码中可以看出,它的设计使得它在threadStatus != 0(零状态值对应于状态“NEW”)或线程已经停止时正常返回。

答案 1 :(得分:0)

其他答案解决了具体问题,因此我将尝试讨论其背后的更一般的想法。

基本上,如果设计人员不允许调用方法,他们会尝试检测编程错误。在设计器视图中,当线程从未启动时调用interrupt()似乎可能是一个错误,而stop()的相同内容似乎不那么严重。

还有其他类似的例子。例如,Future#cancel()可以多次调用。

最终我认为存在一种主观性/偏好的元素,即使在某些情况下,一个人明显比另一个更有意义。