[英]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.