1. 线程池
CacheThreadPool:(建议使用)
FixedThreadPool 使用有限的线程集来执行所提交的任务,可以限制线程的数量
SingleThreadExecutor: 线程数量为1的FixedThreadPool 任何时刻都只有一个线程在运行
2. yield:给线程调度机制一个暗示:你的工作已经做的差不多了,可以让别的线程使用CPU了
不过这只是一个暗示,没有任何机制保证它将会被采纳
3. join: 一个线程可以在其他线程之上调用join方法,其效果是等待一段时间直到第二个线程结束才继续执行。
4. 使用lock()和unlock()的好处:
使用synchronized关键字,当失败时,就会抛出一个异常,你没有机会做任何清理工作,使用显式lock,可以在finally子句中维护正确状态
显式lock对象在加锁和释放锁方面,可以实现更细粒度的控制
5. 像Vector和Hashtable这类早期容器具有许多synchronized方法,当他们用于非多线程的应用程序中,便会导致不可接受的开销
6. ConcurrentHashMap允许并发的读取和写入
CacheThreadPool:(建议使用)
FixedThreadPool 使用有限的线程集来执行所提交的任务,可以限制线程的数量
SingleThreadExecutor: 线程数量为1的FixedThreadPool 任何时刻都只有一个线程在运行
2. yield:给线程调度机制一个暗示:你的工作已经做的差不多了,可以让别的线程使用CPU了
不过这只是一个暗示,没有任何机制保证它将会被采纳
3. join: 一个线程可以在其他线程之上调用join方法,其效果是等待一段时间直到第二个线程结束才继续执行。
4. 使用lock()和unlock()的好处:
使用synchronized关键字,当失败时,就会抛出一个异常,你没有机会做任何清理工作,使用显式lock,可以在finally子句中维护正确状态
显式lock对象在加锁和释放锁方面,可以实现更细粒度的控制
5. 像Vector和Hashtable这类早期容器具有许多synchronized方法,当他们用于非多线程的应用程序中,便会导致不可接受的开销
6. ConcurrentHashMap允许并发的读取和写入