我正在编程我的系统编程课程作业(使用Threads)。
我的活动类实现了runnable,我有另一个带有执行程序的类,它使用:ThreadPoolExecutor e = (ThreadPoolExecutor) Executors.newFixedThreadPool(number);
我在该线程池中同时运行了多个线程。我的问题如下:我可以选择知道一个线程何时完成了关于它需要做什么的工作,如何关闭这个线程,并且 - 只是 - 这个线程,而不是整个执行器?
答案 0 :(得分:1)
ThreadPoolExecutor
负责管理其线程,除了一些可能会破坏执行程序的丑陋黑客之外,你无法访问它们。您应该使用的是API提供的配置选项,例如setKeepAliveTime
或接受keepAliveTime
的构造函数。将此设置为零,您将自动获得所需的行为。
答案 1 :(得分:0)
如果我理解了你想要的是newCachedThreadPool
而不是newFixedThreadPool
来自Java doc
创建一个根据需要创建新线程的线程池,但在它们可用时将重用以前构造的线程。这些池通常会提高执行许多短期异步任务的程序的性能。如果可用,执行调用将重用先前构造的线程。如果没有可用的现有线程,则将创建一个新线程并将其添加到池中。 终止并暂停从缓存中删除未使用60秒的线程。因此,保持空闲足够长时间的池不会占用任何资源。请注意,可以使用ThreadPoolExecutor构造函数创建具有相似属性但不同详细信息的池(例如,超时参数)。