作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从主函数为此类创建一个线程,但即使使用 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
。作为程序员,您有责任检查代码中的中断
标志并正确关闭线程 Activity 。
在您的示例中,您只需编写一个 return
语句即可完成 run()
方法的执行。
有关更多信息,请查看下一篇文章:https://www.javaworld.com/article/2077138/java-concurrency/introduction-to-java-threads.html
关于Java线程中断后处于 Activity 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46517219/
我是一名优秀的程序员,十分优秀!