33-使用执行器替代线程组
11.12 使用执行器替代线程组
ThreadGroup
类提供了按层次结构对线程进行分组的机制,这样就可以在一次调用时完成对同组所有线程的调用。虽然默认所有的线程都属于同一组,但是可以在创建线程时为其指定不同的分组。
不管怎样,线程组其实并没有提供任何有用的功能。
- 还是需要创建线程并管理线程的状态。
- 控制线程组中所有线程状态的方法已经过期,而且也不鼓励使用。
如果需要在普通结构下对线程进行分组,那么使用 Executor
会更好,比如 ThreadPoolExecutor
提供了更多的功能。
- 不用担心管理线程。执行器可以创建、复用线程,这节省了执行资源。
- 执行器可以执行实现了
Runnable
和Callable
接口的并发任务。利用Callable
接口可以实现带有返回结果的任务,这相比传统任务是一个巨大的优势。 - 向执行器发送任务后,它返回了
Future
对象,使用该对象可以简单容易地获取任务的状态、返回结果,以及任务的完成情况。 - 使用
ScheduledThreadPoolExecutor
类实现的执行器,能够安排任务按时重复执行。 - 指定池的最大线程数,这就简单地控制了执行器使用的资源,它不会同时运行超过该数量的任务。
基于这些原因,使用执行器替代线程组会更好。