繁体   English   中英

中断后Java线程处于活动状态

[英]Java Thread active after interruptting

我正在从主函数为此类创建线程,但是即使在使用Thread.currentThread()。interrupt()中断该线程之后,输出仍然包含“ Still Here”行。

public class WriteToServer extends Thread {

    private DataOutputStream writeMessage;

    private String clientName;

    public WriteToServer(Socket socket, String clientName) {
        try {
            this.writeMessage = new DataOutputStream(socket.getOutputStream());
            this.clientName = clientName;
        } catch(Exception e) {
            System.err.println(e);

            Thread.currentThread().interrupt();
        }
    }

    public void run() {
        try {
            Scanner scanner = new Scanner(System.in);
            String message = scanner.nextLine();

            while (!message.equalsIgnoreCase("quit")) {
                writeMessage.writeUTF(clientName + ":" + message);
                message = scanner.nextLine();
            }

            writeMessage.writeUTF(message);
            writeMessage.close();

            Thread.currentThread().interrupt();

            System.out.println("Still Here");
        } catch(Exception e) {
            System.err.println(e);

            Thread.currentThread().interrupt();
        }
    }
}

我是Java新手,我想改善任何建议吗?

没有合法的方法可以立即停止Java中的线程执行。 调用Thread#interrupt()只是将线程上的interrupted标志设置为true 作为程序员,您有责任检查代码中的interrupted标志并正确关闭线程活动。

在您的示例中,您只需编写一个return语句即可完成run()方法的执行。

有关更多信息,请检查下一篇文章: https : //www.javaworld.com/article/2077138/java-concurrency/introduction-to-java-threads.html

如建议的那样, return将仅完成run()的执行。 如果要首先检查该线程是否被其他线程中断,则可以执行以下操作:

if (Thread.currentThread().isInterrupted()) {
     return;
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM