Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ThreadPoolExecutor-特定于关闭的线程?_Java_Multithreading - Fatal编程技术网

Java ThreadPoolExecutor-特定于关闭的线程?

Java ThreadPoolExecutor-特定于关闭的线程?,java,multithreading,Java,Multithreading,我正在编写我的系统编程课程作业(使用线程) 我的活动类实现runnable,我有另一个类,它有一个执行器,使用a:ThreadPoolExecutor e=(ThreadPoolExecutor)Executors执行该runnable 我有几个线程在该线程池中同时运行。我的问题如下:我可以选择知道一个线程何时完成了它的“工作”,关于它需要做什么,我如何关闭这个线程,并且-只有-这个线程,而不是整个执行器?threadpoolexecutior负责管理它的线程,您无法访问它们,除了一些可能会破坏

我正在编写我的系统编程课程作业(使用线程)

我的活动类实现runnable,我有另一个类,它有一个执行器,使用a:
ThreadPoolExecutor e=(ThreadPoolExecutor)Executors执行该runnable


我有几个线程在该线程池中同时运行。我的问题如下:我可以选择知道一个线程何时完成了它的“工作”,关于它需要做什么,我如何关闭这个线程,并且-只有-这个线程,而不是整个执行器?

threadpoolexecutior
负责管理它的线程,您无法访问它们,除了一些可能会破坏遗嘱执行人的骇客。您应该使用API提供的配置选项,例如
setKeepAliveTime
或接受
keepAliveTime
的构造函数。将此值设置为零,您将自动获得所需的行为。

如果我理解正确,您需要的是而不是
newFixedThreadPool

来自Java文档

创建一个线程池,该线程池根据需要创建新线程,但在以前构造的线程可用时将重用这些线程。这些池通常会提高执行许多短期异步任务的程序的性能。调用execute将重用以前构造的线程(如果可用)。如果没有可用的现有线程,将创建一个新线程并将其添加到池中60秒未使用的线程将被终止并从缓存中删除。因此,空闲时间足够长的池不会消耗任何资源。请注意,可以使用ThreadPoolExecutor构造函数创建具有类似属性但详细信息不同(例如超时参数)的池


如果你没有关闭这个没有立即执行任何操作的线程,它会有什么不同?因为我想要另一个线程正在等待它的位置?你没有看到这种情况发生吗?如果是这样的话,我建议你换一个操作系统。Windows和Unix将始终停止空闲线程并启动等待运行的线程。如果它不自动扩展其线程数,这将是完美的,因为在我的任务中,我必须亲自检查。对不起,我可以得到进一步的解释吗?我不理解setKeepAliveTime的java文档。它有什么作用?是关于池中的某个线程还是整个池?为什么如果我把它设为零,它会自动让我做出我想要的行为?难道“没事做”和“正在等待”不是同义词吗?解释一下你的意思。有时一个线程正在等待其他线程释放某些设备,然后执行。setKeepAliveTime不会杀死当前正在等待的线程,对吗?不要混淆“线程”和“任务”。如果向执行者提交任务,只要任务没有完成,线程就被该任务占用。