当多个线程访问某个状态量并且其中有一个线程执行写入操作时,必须采用同步机制来协同这些线程对变量的访问。
java主要的同步机制是关键字sybchronized, 它提供了一种独占的加锁方式。“同步”这个术语还包括volatile类型的变量,显示锁和原子变量
线程池
Executor可以将任务的提交和任务的执行解耦开来,提供了很大的灵活性。但并非所有的任务都能适用于所有执行策略。有些类型的任务需要明确的指定执行策略。
依赖性任务
- 依赖性任务:如果提交给线程池的任务需要依赖其他的任务,那么久隐含的给执行策略带来了约束
- 使用线程封闭机制的任务:如果任务要求其执行所在的Executor是单线程的。如果将executor从单线程改为线程池环境,失去线程安全
- 对相应时间敏感的任务:将运行时间较长的任务提交到单线程的executor中,或者多个运行时间较长的任务提交到一个只包含少量线程的线程池里,降低executor管理的服务的响应性
- threadlocal任务 只有当线程本地值的生命周期受限于任务的生命周期时,在线程池的线程使用threadlocal才有意义
只有当任务都是同类型并且互相独立时,线程池的性能才能达到最佳 长短任务混合容易造成“阻塞”