如何阻止这个帖子?

时间:2016-08-16 05:42:21

标签: android multithreading sockets threadpool

我在我的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方法时,我想关闭套接字,关闭池并停止线程。

1 个答案:

答案 0 :(得分:0)

只需调用shutDownNow关闭池并尝试中断其中的所有线程。您可以在post

中查看差异
  
      
  • shutdown()只会告诉执行程序服务它不能接受新任务,但已经提交的任务继续运行
  •   
  • shutdownNow()将执行相同操作并尝试通过中断相关线程来取消已提交的任务。请注意,如果   你的任务忽略了中断,shutdownNow将完全表现出来   与关机一样。
  •   

如果要中断或取消特定线程。我建议您将submitCallables一起使用,这样,您就可以使用Future对象,然后如果要取消已经提供执行服务的任务,您可以在其关联的cancel(true)上致电Future。当您的任务检测到中断请求时,它应通过调用Thread.currentThread().interrupt()保留中断状态。