为什么Thread.stop()如此危险

Dr.*_*elu 6 java multithreading

为什么Thread.stop()这么危险?

为什么建议使用Thread.interrupted()

我知道stop已被弃用.还有什么东西让它不安全?

有什么地方可以使用stop方法吗?如果是这样给我一个例子.

Ste*_*n C 9

为什么Thread.stop()如此危险?

这里详细描述了这些问题:http: //download.oracle.com/javase/6/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html

为什么建议使用Thread.interrupted()代替?

因为Thread.interrupt()让中断的目标线程在它知道可以安全的时候到达某个点时进行响应.

我知道停止被弃用了.还有什么东西让它不安全?

见上面的链接.

有什么地方可以使用停止方法吗?如果是这样给我一个例子.

理论上,如果你知道你停止的线程:

  • 没有更新与其他线程共享的数据结构,
  • 没有使用wait/notify或更高级别的同步类,或者依赖它们的类,
  • 还有一些其他的东西.

例如,我认为stop()这个线程是安全的:

new Thread(new Runnable(){
    public void run(){for (long l = 0; l > 0; l++){}}).start();
Run Code Online (Sandbox Code Playgroud)

但是,在大多数情况下,进行分析以确定呼叫是否真的安全是非常困难的stop().例如,您必须分析线程使用的每个可能的代码(包括核心和第三方库).因此,默认情况下会使其不安全.

  • +1:使用stop()的问题在于它只能在行为良好,易于理解的简单线程中安全地工作,但是如果它表现良好,则不需要使用stop(). (6认同)