【问题标题】:Java Thread active after interrupttingJava 线程在中断后处于活动状态
【发布时间】:2017-10-01 21:48:17
【问题描述】:

我正在从 main 函数为这个类创建一个线程,但即使在使用 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 中被重载为“实际上不是中断”。
  • 你能详细说明一下吗?

标签: java multithreading sockets


【解决方案1】:

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

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

如需了解更多信息,请查看下一篇文章:https://www.javaworld.com/article/2077138/java-concurrency/introduction-to-java-threads.html

【讨论】:

    【解决方案2】:

    正如建议的那样,return 将刚刚完成run() 的执行。如果你想先检查线程是否被中断(被另一个线程),你可以这样做:

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

    【讨论】:

      猜你喜欢
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 2012-01-27
      • 1970-01-01
      • 2012-11-26
      相关资源
      最近更新 更多