当前位置: 首页 > 知识库问答 >
问题:

ExecutorService没有关闭

壤驷志学
2023-03-14

我有以下代码

    ExecutorService es = Executors.newSingleThreadExecutor();
    es.submit(new Runnable() {
           @Override public void run() 
           {
                  while(true);

            }
   });

es.shutdownNow();

共有1个答案

林雅畅
2023-03-14

我这样做了,效果很好:

    ExecutorService es = Executors.newSingleThreadExecutor();
    es.submit(new Runnable() {
           @Override public void run() 
           {
                  while(!Thread.currentThread().isInterrupted());

            }
   });

   es.shutdownNow();

原因是ShutdownNow不会终止线程。它只是中断所有正在运行的线程

 类似资料:
  • 我正在学习Java 1.5中引入的ExecutorService 下面的例子似乎违背了预期的行为: 查看此方法的java文档: 尝试停止所有正在执行的任务,停止正在等待的任务的处理,并返回正在等待执行的任务的列表。 此方法不等待主动执行的任务终止。请使用等待终止来完成此操作。 除了尽最大努力尝试停止处理积极执行的任务之外,没有任何保证。例如,典型的实现将通过Thread.interrupt取消,因

  • 我对ExecutorService的javadoc#shutdown方法感到困惑。这些说法不矛盾吗? 启动有序关闭,其中执行以前提交的任务,但不接受新任务。此方法不会等待以前提交的任务完成执行。使用waitTersion执行此操作。 如果它能有序地关闭之前提交的任务,那么它怎么能等它们完成执行呢?

  • 我正在编写一个JavaFractal Explorer,分形计算是多线程完成的。以前,我只是创建了一堆线程(系统有多少处理器内核就有多少)并将它们保存在一个数组中,但这会导致一些问题,而且不是很优雅,现在我想切换到执行器。 我需要的功能是: 用户可以随时选择要放大的分形图像的新区域,因此应该可以随时取消计算,并立即重新插入新任务 我的问题是Java ExecutorService(我使用Execu

  • 我从主线程调用了下面的代码,使用ExecutorService池并启动一个线程来处理找到的每个文件。我正在尝试了解当主线程被kill命令终止时ExecutorService的行为。生成的线程会发生什么?一旦完成工作,它们会立即被杀还是终止? 还有没有更好/更安全的方法来编写下面的代码段,特别是如果我在无限循环中运行这部分,例如等待文件被放到输入目录并分配线程来处理它们?在这种情况下,我应该创建一个

  • java.util.concurrent.ExecutorService接口是Executor接口的子接口,并添加了管理生命周期的功能,包括单个任务和执行程序本身。 ExecutorService方法 Sr.No. 方法和描述 1 boolean awaitTermination(long timeout, TimeUnit unit) 阻止所有任务在关闭请求之后完成执行,或发生超时,或者当前线程

  • 问题内容: 在我的webapp中,我创建了一个使用固定大小的ThreadPool的服务。我在整个应用程序生命周期中都重复使用了相同的代码。 所有人都在Tomcat中运行,这在关闭时给我以下错误: 我确实意识到我需要在关闭tomcat之前先关闭ExecutorService。Soms SO线程已经在谈论这一点,但是我找不到一种干净的方法来解决这个问题。 是否应该在正常关闭线程和执行器的情况下使用建议