【问题标题】:Shutdown Thread Pool obtained from Executors.newFixedThreadPool从 Executors.newFixedThreadPool 获取的关闭线程池
【发布时间】:2014-06-24 14:06:47
【问题描述】:

我正在使用 Executors.newFixedThreadPool 每两分钟启动一个线程,该线程将数据发送到服务器。

一段时间后将没有任何数据要发送。在这种情况下,我该如何关闭池。 我可以从通过 ThreadPool 运行的同一线程启动池的关闭

代码是:

scheduledThreadPool = Executors.newScheduledThreadPool(5);

        Runnable runnable = new Runnable() {
            @SuppressLint("ShowToast")

            public void run() {

                Log.e("Thread Pool -1 is running", "ThreadPool-1");
                sendDataToServer();


            }

        };

        scheduledThreadPool.scheduleWithFixedDelay(runnable, INITIAL_DELAY,
                DELAY, TimeUnit.SECONDS);

        }

【问题讨论】:

  • 你能发布你的动态添加到池中的线程吗?
  • 您希望整个池停止还是只运行 1 个?
  • 我想停止整个池
  • 池本身没有做任何事情。它创建的 Futures 正在完成这项工作,因此您必须阻止它们,而不是阻止池。只需保留您创建的 Futures 上的引用,然后在需要时取消它们。

标签: java android


【解决方案1】:

保留您预定的未来以供将来参考。

final ScheduledFuture<?> scheduledFuture = scheduledThreadPool.scheduleWithFixedDelay(runnable, INITIAL_DELAY,
            DELAY, TimeUnit.SECONDS);

要取消,请在 Future 上调用 cancel(boolean) 方法:

scheduledFuture.cancel(true);

您必须保留从池中创建的所有期货,以便以后可以取消。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-02
    • 2011-04-28
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2016-12-23
    • 2014-03-10
    相关资源
    最近更新 更多