当前位置: 首页 > 知识库问答 >
问题:

Java线程。stop()vs Thread.intervrupt()

齐鸿光
2023-03-14

我有以下代码:

renderThread = new Thread(new Runnable() {

    @Override
    public void run() {
        for (int i = 0; i < 10000000; i++) {
            System.out.println("Number: " + i);
        }
    }
});

renderThread.start();

try {
    Thread.sleep(100);
} catch (InterruptedException ex) {
    ex.printStackTrace();
}

renderThread.interrupt(); //It should stop, but it does not stop.

renderThread。interrupt()不会中断线程,它会继续运行。如果我替换renderThread。interrupt()。stop(),然后线程停止。但是,。stop()已弃用。那么,如果不推荐使用stop,而interruptdon't work,那么停止线程的正确方法是什么?

共有3个答案

井镜
2023-03-14

你应该看看这篇文章:http://10kloc.wordpress.com/2013/03/03/java-multithreading-steeplechase-stopping-threads/

基本上,你不应该停止一个线程(不安全),而是中断它。你缺少的是让线程处理中断。

姚子石
2023-03-14

要真正说明为什么不应该使用< code>Thread.stop()?

Doug Lea最近提到,Thread.stop将是Java come Java 8的第一个解实现方法。

他对某人的评论的回应是:

此外,synchronized还有一个优点,那就是它处理线程的异步中止(即thread.stop())。我知道stop()已被弃用,但你永远不会知道。

曾经是:

但你知道!从JDK8开始,线程。停下来了。它是第一个实际被取消实现的不推荐使用的方法。它现在只抛出UnsupportedOperationException。

http://cs.oswego.edu/pipermail/concurrency-interest/2013-December/012028.html

毛宏达
2023-03-14

当您调用interrupt()时,它会触发一个布尔标志,告诉运行函数应该停止。这就是为什么我通常这样写我的运行函数。

void run()
{
    while(!Thread.interrupted())
    {
        //Do something
    }
}

仅仅因为您调用了中断并不意味着线程会立即或根本停止。这取决于run函数中的内容。

 类似资料:
  • 问题内容: 以下代码是我的应用中的服务器代码: 代码工作方式,即如果我尝试直接连接,则两端进行通信和更新。 问题是即时通讯正在侦听连接,如果我想退出侦听,则服务器线程会继续运行并导致问题。 我知道我不应该在线程上使用.stop(),所以我想知道解决方案的外观如何? 编辑:注释掉不需要的代码。 问题答案: 从外部线程关闭服务器套接字。根据Serversocket.close()上的文档,阻塞接受将抛

  • 本文向大家介绍JAVA多线程之中断机制stop()、interrupted()、isInterrupted(),包括了JAVA多线程之中断机制stop()、interrupted()、isInterrupted()的使用技巧和注意事项,需要的朋友参考一下 一,介绍 本文记录JAVA多线程中的中断机制的一些知识点。主要是stop方法、interrupted()与isInterrupted()方法的区

  • 问题内容: 问题答案: 调用stop的替代方法是使用中断向线程发出信号,告知你希望它完成其工作。(这假设你要停止的线程行为良好,如果它在抛出异常后立即通过吃掉它们而忽略了InterruptedException,并且不检查中断状态,那么你将返回使用stop()。) 下面是一些代码,我写的一个答案,一个线程的问题在这里,它的线程中断,将如何工作的例子: 要注意的一些事情: 中断原因并立即抛出,否则你

  • 问题描述 (Problem Description) 如何停止一段时间的线程? 解决方案 (Solution) 下面的示例演示了如何通过创建用户定义的方法run()来获取线程,并借助Timer类的方法。 import java.util.Timer; import java.util.TimerTask; class CanStop extends Thread { private vola

  • 如果希望停止执行程序,可以插入停止语句。 例子 (Example) program stop_example implicit none integer :: i do i = 1, 20 if (i == 5) then stop end if pri

  • 概要 <#stop> 或 <#stop reason> 这里: reason: 关于终止原因的信息化消息。是表达式,被算做是字符串。 描述 中止模板处理,给出(可选的)错误消息。 不要在普通情况下对结束模板处理使用! FreeMarker 模板的调用者会将它视为失败的模板呈现, 而不是普通完成的。 该指令抛出 StopException,而且 StopException 会持有 reason 参