使用执行器代替线程组
ThreadGroup类为分层结构中的线程提供了一种分组机制,对属于线程组的所有线程进行操作,只需调用一次即可。默认情况下,所有线程属于相同组,但在创建线程时可以指定不同的线程组。
不管怎样,线程组没有提供任何有用的特性:
- 需要创建线程且管理线程的状态
- 控制线程组中所有线程状态的方法已经被废弃,不鼓励使用这些方法
如果需要在公共结构下对线程进行分组,最好使用Executor实现,比如ThreadPoolExecutor。它提供了更多功能,如下所示:
- 无需考虑线程管理,执行器创建并重用线程来节省执行资源。
- 通过实现Runnable或Callable接口来实现并发任务。Callable接口实现返回结果的任务,远优于传统任务。
- 当发送任务到执行器时,如果任务已经执行完成,执行器返回Future对象,以了解任务状态和返回结果。
- 使用ScheduledThreadPoolExecutor类实现的特殊执行器来调度任务并重复执行。
- 能够轻松地控制执行程序使用的资源,也可以在池中建立线程的最大数量,指定执行器每次运行任务数量的上限。
基于这些原因,最好使用执行器来代替线程组。
扩展学习
- 本章“将线程管理委托给执行器”小节