【发布时间】:2017-01-17 16:47:47
【问题描述】:
老实说,我想不通 - 我听说 thread.stop() 不是一个好东西。它也不适合我。如何让线程/处理程序停止运行?
【问题讨论】:
老实说,我想不通 - 我听说 thread.stop() 不是一个好东西。它也不适合我。如何让线程/处理程序停止运行?
【问题讨论】:
线程应该以“礼貌”的方式终止。你应该建立一些机制让你的线程停止。您可以在线程的每个循环上检查一个 volatile 布尔参数(假设您在那里有循环),如下所示:
while (!threadStop) {
// Do stuff
}
然后您可以从另一个线程将布尔值设置为 false(但请确保您处理所有同步问题)并且您的线程将在下一次迭代中停止。
【讨论】:
好的,停止线程的答案已经完成。要停止处理程序,您必须使用以下方法:
removeCallbacksAndMessages from Handler class这样的
myHandler.removeCallbacksAndMessages(null);
【讨论】:
你可以这样使用它..
Thread mythread=new Thread();
if(!mythread){
Thread dummy=mythread;
mythread=null;
dummy.interrupt();
}
或 你可以使用
mythread.setDeamon(true);
【讨论】:
if (!mythread) 在 Java 中不起作用。
停止处理程序的正确方法是:
handler.getLooper().quit();
我通常通过向自行终止的处理程序发送退出消息来实现这一点。
停止泛型线程的正确方法是:
thread.interrupt();
正在停止的线程需要处理中断:
if(isInterrupted())
return;
如果你愿意,这可以放在一个循环中:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
try {
while(!isInterrupted() && (line = br.readLine()) != null) {
// Do stuff with the line
}
}
catch(IOException e) {
// Handle IOException
}
catch(InterruptedException e) {
// Someone called interrupt on the thread
return;
}
【讨论】: