【问题标题】:Thread.stop() wont stop the thread [duplicate]Thread.stop() 不会停止线程[重复]
【发布时间】:2013-03-21 12:50:51
【问题描述】:

我正在编写一个程序,我需要一个线程停止并启动另一个线程。我的问题是,如果我 t1.stop() 比 t1.start() 我得到 java.lang.IllegalThreadStateException

            if (t1.isAlive() == true){
                    t1.stop();
// above I stop the thread and call another
                    t2.start();
                    System.out.println("t1 was playing");
                }else{
                    t2.stop();
                    t1.start(); 
// above I stop the other thread and want to start the first thread again, but when I run the program I get the exception i said above
                }

【问题讨论】:

  • 这不是问题。
  • -1 搜索首先。我用了IllegalThreadStateException thread start,发现不缺重复项。
  • (在任何情况下,解决方案是创建一个 new 线程或提供一种机制来“空闲”线程,当它需要暂时挂起 - 例如当一个游戏暂停。)

标签: java multithreading


【解决方案1】:

当一个线程停止时,你不能重新启动它。

  1. 但是,您可以创建并启动一个新线程。
  2. 此外,您可以暂停和恢复线程。

不推荐使用暂停和恢复线程(以及停止等)的 java 原语。请参阅此内容以了解如何实现所需的最佳效果 - http://docs.oracle.com/javase/7/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html 检查如何执行相当于暂停和恢复的操作

我应该使用什么来代替 Thread.suspend 和 Thread.resume?

与 Thread.stop 一样,谨慎的方法是让“目标线程”轮询一个变量,该变量指示线程的所需状态(活动或挂起)。当所需的状态被挂起时,线程使用 Object.wait 等待。当线程恢复时,使用 Object.notify 通知目标线程。

在相同的答案中给出了示例代码来帮助您实现这一目标。

【讨论】:

  • (次要选择,但我们现在已经达到 Java 7,链接到更多更新文档可能会很好 - 在这种情况下,我很确定细节是相同的)
  • @MadProgrammer - 更新:)
  • 如果我想重启线程怎么办?
  • @user2109242 - 检查链接和示例。他们使用notify 来恢复暂停的线程。
【解决方案2】:

Thread#stop 已弃用,您不应使用它。

来自 JavaDocs

停止()
已弃用。

这种方法本质上是不安全的。停止一个 带有 Thread.stop 的线程会导致它解锁所有的监视器 它已锁定(作为未检查的 ThreadDeath 的自然结果 异常向上传播堆栈)。如果之前的任何对象 受这些监视器保护的状态不一致,损坏的 对象对其他线程可见,可能导致 任意行为。 stop 的许多用法应该被替换为 简单地修改一些变量来指示目标线程 应该停止运行。目标线程应该检查这个变量 有规律地从它的 run 方法返回 变量表示要停止运行。如果目标线程 等待很长时间(例如,在条件变量上), 应该使用中断方法来中断等待。更多 信息,请参阅Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?

线程也是不可重入的,或者是单次使用的。一旦run 方法终止,它们就无法重新启动

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多