我正在从main函数为这个类创建一个Thread,但即使在使用Thread.currentThread()中断它之后.insert()输出仍然包含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的新手,我想改进任何建议?
答案 0 :(得分:2)
没有 legal 方法可以立即停止Java中的线程执行。调用Thread#interrupt()
只会将线程上的interrupted
标志设置为true
。作为程序员,您有责任检查代码中的interrupted
标志并正确关闭线程活动。
在您的示例中,您只需编写一个return
语句即可完成run()
方法的执行。
有关详细信息,请查看下一篇文章:https://www.javaworld.com/article/2077138/java-concurrency/introduction-to-java-threads.html
答案 1 :(得分:0)
根据建议,return
将完成run()
的执行。如果你想首先检查线程是否被中断(由另一个线程),你可以这样做:
if (Thread.currentThread().isInterrupted()) {
return;
}