Java 线程池的实现原理其实就是一个线程集合 workerSet 和一个阻塞队列 workQueue。
当用户向线程池提交一个任务(也就是线程)时, 线程池会先将任务放入 workQueue 中。
workerSet 中的线程会不断的从 workQueue 中获取线程然后执行。 当 workQueue 中没有
任务的时候, worker 就会阻塞, 直到队列中有任务了就取出来继续执行。
FixedThreadPool 使用的是“无界队列”LinkedBlockingQueue
6. sychronized 和 ReentrantLock 的区别
( 1) ReentrantLock 显示获得、 释放锁, synchronized 隐式获得释放锁
( 2) ReentrantLock 可响应中断、 可轮回, synchronized 是不可以响应中断的, 为处理
锁的不可用性提供了更高的灵活性
( 3) ReentrantLock 是 API 级别的, synchronized 是 JVM 级别的
( 4) ReentrantLock 可以实现公平锁
( 5) ReentrantLock 通过 Condition 可以绑定多个条件