【发布时间】:2012-02-06 04:44:16
【问题描述】:
与其他许多人一样,我在不使用 stop() 的情况下杀死我的线程时遇到了问题。 我曾尝试在我的线程 run() 例程中对带有 while 循环的变量使用 volatile。
据我所知,问题在于,while 循环只在每轮之前检查变量。我运行的复杂例程需要很长时间,因此线程不会立即终止。
我要终止的线程是一个连接到另一台服务器的例程,它使用了很长的时间。我想为此设置一个中止按钮。 (终止线程)。我会尝试用一些代码来解释。
class MyConnectClass{
Thread conThread;
volitile boolean threadTerminator = false;
..some code with connect and abort button..
public void actionPerformed(ActionEvent e) {
String btnName = e.getActionCommand();
if(btnName.equalsIgnoreCase("terminate")){
threadTerminator = true;
conThread.interrupt();
System.out.println("#INFO# USER ABORTED CURRENT OPERATION!");
}else if(btnName.equalsIgnoreCase("connectToServer")){
conThread = new Thread() {
public void run() {
while(threadTerminator == false){
doComplexConnect(); //Uses a loooong time
}
}
}
conThread.start();
}
}
}
如何立即终止我的“连接”线程? 谢谢。
【问题讨论】:
-
你能用普通的中断设施中断线程吗?
-
我正在尝试使用 conThread.interrupt();希望线程会中止可能的子线程。我的连接方法使用 ssh 连接到另一个位置,它等待远程位置响应。是“conThread.interrupt();”吗?你有正常的中断设施吗?
-
你能澄清你的外部问题吗,因为很可能解决方案与线程无关。为什么需要这么快中止操作?
-
我的 conThread 正在等待远程 ssh shell 应答。这就是需要这么长时间的原因。我想用我的“中止”按钮中止这个线程(和等待)。我的主线程在等待这个完成时禁用了其他连接按钮。我想中止,以便我可以启用其他操作的按钮。
-
所以关闭 TCP 连接,等待将停止。 (停止你想要停止的实际事情,而不是线程。)
标签: java multithreading abort