Java ThreadPoolExecutor - 关闭特定线程?

时间:2012-12-18 09:37:12

标签: java multithreading

我正在编程我的系统编程课程作业(使用Threads)。

我的活动类实现了runnable,我有另一个带有执行程序的类,它使用:ThreadPoolExecutor e = (ThreadPoolExecutor) Executors.newFixedThreadPool(number);

执行该runnable

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

2 个答案:

答案 0 :(得分:1)

ThreadPoolExecutor负责管理其线程,除了一些可能会破坏执行程序的丑陋黑客之外,你无法访问它们。您应该使用的是API提供的配置选项,例如setKeepAliveTime或接受keepAliveTime的构造函数。将此设置为零,您将自动获得所需的行为。

答案 1 :(得分:0)

如果我理解了你想要的是newCachedThreadPool而不是newFixedThreadPool

来自Java doc

  

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