Executor
ExecutorService
AbstractExecutorService
ThreadPoolExecutor
ThreadPoolExecutor继承AbstractExecutorService,是一个线程池的具体的实现
内部类 Worker
private final class Worker extends AbstractQueuedSynchronizer implements Runnable
代表线程池的一个工作线程,继承了AbstractQueuedSynchronizer,将该类实现为一个简单的互斥锁 。
重要的成员:
final Thread thread; Runnable firstTask; volatile long completedTasks;
Worker封装了执行任务的线程,首次执行的任务,完成的任务数。
Worker(Runnable firstTask) { setState(-1); // inhibit interrupts until runWorker this.firstTask = firstTask; this.thread = getThreadFactory().newThread(this); }
Worker初始化设置state为 -1(1表示锁被占用,0表示未被占用),因为 interruptIfStarted 方法中有 getState() >= 0,这样刚初始化还没运行task的线程不能被中断。
1 void interruptIfStarted() { 2 Thread t; 3 if (getState() >= 0 && (t = thread) != null && !t.isInterrupted()) { 4 try { 5 t.interrupt(); 6 } catch (SecurityException ignore) { 7 } 8 } 9 }