池是一种非常流行的资源管理模式,比如线程池、连接池等。对于线程池,在java的类库中已经提供了线程池的一些基本实现,
在平常应用中,我们使用类库中给我们提供的已经足够了。但不知大伙有没有跟我一样的疑问,线程池中的线程是如何保持空闲状态的?
这个问题其实很好找到答案,看下源码就知道了!废话不多说,直接贴上JDK中的源码
final void runWorker(Worker w) {
Thread wt = Thread.currentThread();
Runnable task = w.firstTask;
w.firstTask = null;
w.unlock(); // allow interrupts
boolean completedAbruptly = true;
try {
while (task != null || (task = getTask()) != null) {
w.lock();
// If pool is stopping, ensure thread is interrupted;
// if not, ensure thread is not interrupted. This
// requires a recheck in second case to deal with
// shutdownNow race while clearing interrupt
if ((runStateAtLeast(ctl.get(), STOP) ||
(Thread.interrupted() &&
runStateAtLeast(ctl.g