我在我的android代码中实现了this类
我在run方法中做了以下更改(替换了" true"):
@Override
public void run() {
while (!isInterrupted()) {
try {
// A blocking operation. Initiate a ChatManager instance when
// there is a new connection
pool.execute(new ChatManager(socket.accept(), handler));
Log.d(TAG, "Launching the I/O handler");
} catch (IOException e) {
try {
if (socket != null && !socket.isClosed())
socket.close();
} catch (IOException ioe) {
}
e.printStackTrace();
pool.shutdownNow();
break;
}
}
}
我想在关闭应用程序之前停止此线程。所以我实现了threadName.interrupt();方法。但这并不会打断线程。
我实际上对线程池执行程序的使用感到困惑。所以我不确定如何有效地做到这一点。如何实现中断此线程?当调用interrupt方法时,我想关闭套接字,关闭池并停止线程。
答案 0 :(得分:0)
只需调用shutDownNow
关闭池并尝试中断其中的所有线程。您可以在post:
shutdown()
只会告诉执行程序服务它不能接受新任务,但已经提交的任务继续运行shutdownNow()
将执行相同操作并尝试通过中断相关线程来取消已提交的任务。请注意,如果 你的任务忽略了中断,shutdownNow将完全表现出来 与关机一样。
如果要中断或取消特定线程。我建议您将submit
与Callables
一起使用,这样,您就可以使用Future
对象,然后如果要取消已经提供执行服务的任务,您可以在其关联的cancel(true)
上致电Future
。当您的任务检测到中断请求时,它应通过调用Thread.currentThread().interrupt()
保留中断状态。