本章将介绍对线程池进行配置与调优的一些高级选项,并分析在使用任务执行框架时需要注意的各种危险,以及Executor的一些高级的使用方法。
有些类型的任务需要明确地指定执行策略:
依赖性任务: 当在线程池中执行独立的任务时,可以随意地改变线程池的大小和配置,这些修改只会对执行性能产生影响。 然而,如果提交给线程池的任务需要依赖其他的任务,那么隐含地给执行策略带来了约束,必须小心地维持这些执行策略以避免产生活跃性问题。 使用线程封闭机制的任务 这种情形将任务与执行策略之间形成隐含的耦合——任务要求其执行所在的Executor是单线程的(准确的说,只要一个任务对内存的作用对于下一个任务一定是可见的,这正是newSingleThreadExecutor的做法)。 如果将Executor从单线程环境改为线程池环境,那么将失去线程安全性。 对响应时间敏感的任务 例如:GUI 将多个运行时间较长的任务提交给一个只包含少量线程的线程池,这将降低Eecutor管理的服务的响应性 使用ThreadLocal的任务 只有当线程本地值的生命周期受限于任务的生命周期时,在线程池的线程中使用ThreadLoadl才有意义 而在线程池的线程中不应该使用ThreadLocal在任务之间传递值