遗嘱执行人是否可以重复使用?

Jim*_*Jim 21 java concurrency executorservice java.util.concurrent

一个执行器对象是否意味着在一个shutdown?之后重用?我的意思是,如果我调用shutdownshutdownNow在执行程序终止后,我应该new创建一个新的线程池,还是可以以某种方式"重置"/重用以前终止的执行程序并重用它?

更新:
如果我需要创建新的线程池,我怎么能"理解"前一个已停止?
例如以下内容:

public void startPool(){  
   if(threadPool != null && !threadPool.isShutdown()){
    return;
   }  
   threadPool = Executors.newCachedThreadPool();  
   //other stuff

}  

public void stopPool(){  
   if(threadPool != null){  
    threadPool.shutdown();   
  }  
}   
Run Code Online (Sandbox Code Playgroud)

不管用.如果我调用stop然后start由于条件将不会创建新的线程池.编码的正确方法是什么?

Bri*_*new 19

来自doc:

终止时,执行程序没有正在执行的任务,没有等待执行的任务,也没有任何新任务可以提交

所以(简要地),不,你不能重复使用它.从shutdown()doc:

启动有序关闭,其中先前提交的任务将被执行,但不会接受任何新任务.

这些方法isTerminated()isShutdown()可用于确定是否执行程序已关闭,并且该任务已经完成了分别.


Evg*_*eev 5

1)关闭它后,你不能重用ThreadPoolExecutor,API

An ExecutorService can be shut down, which will cause it to reject new tasks
Run Code Online (Sandbox Code Playgroud)

注意:如果要重用ThreadPoolExecutor,请不要关闭它.

2)如果您想知道是否需要重新创建ThreadPoolEdxecutor使用

ExecutorService.isShutdown()
Run Code Online (Sandbox Code Playgroud)

如果此执行程序已关闭,则返回true


Ral*_*f H 5

我们在这里讨论Oracla Javas ThreadPoolExecutor(实现Executor接口).在那里,关闭shutdown的方法注释没有明确禁止转换关闭运行,但是类注释列出了ThreadPoolExecutors支持的所有转换,并且无法从关闭返回.返回需要另一个方法重启/启动或类似的.这不存在,但是发现它有用的人可以扩展接口并在关闭后实现重新启动而不会破坏关闭语义.这样做可能会有点困难,因为关闭本身并不能保证最终处理停止.所以工人可以继续,直到他们完成,如果他们完成.与仅创建另一个执行程序相比,在这些情况下重新启动可能不值得.