new RuntimePermission("modifyThread");
调用shutdown和shutdownNow的权限
这是Worker类 实现了
private final class Worker
extends AbstractQueuedSynchronizer
implements Runnable
继承自AQS 实现了Runnable接口
{
private static final long serialVersionUID = 6138294804551838833L;
/** Thread this worker is running in. Null if factory fails. */
final Thread thread;
这个Worker跑在这个线程里
Runnable firstTask;
初始任务
volatile long completedTasks;
已完成的任务数
Worker(Runnable firstTask) {
setState(-1); // inhibit interrupts until runWorker
this.firstTask = firstTask;
this.thread = getThreadFactory().newThread(this);
}
构造方法
首先设置状态 调用的AQS的方法
将参数的Runnable传给firstTask
调用getThreadFactory方法获取线程工厂创建新线程 赋给thread属性
public void run() {
runWorker(this);
}
run方法 调用runWorker
protected boolean isHeldExclusively() {
return getState() != 0;
}
判断是否是否被一个线程独占 就是判断状态 0的话是非被占有 1的话是被占有
protected boolean tryAcquire(int unused) {
if (compareAndSetState(0, 1)) {
setExclusiveOwnerThread(Thread.currentThread());
return true;
}
return false;
}
试图获取这个Worker的锁 调用AQS的cas方法给worker状态赋为1 然后将worker的独有线程设置为当前线程
protected boolean tryRelease(int unused) {
setExclusiveOwnerThread(null);
setState(0);
return true;
}
试图释放线程独占的方法 先将独占线程设为空 然后将状态设为0 然后返回true
public void lock() { acquire(1); }
public boolean tryLock() { return tryAcquire(1); }
public void unlock() { release(1); }
public boolean isLocked() { return isHeldExclusively(); }
被锁 试图被锁 解锁 是否被锁的方法 都是调用 就是线程是否获取这个worker的锁的相关方法
void interruptIfStarted() {
Thread t;
if (getState() >= 0 && (t = thread) != null && !t.isInterrupted()) {
try {
t.interrupt();
} catch (SecurityException ignore) {
}
}
}
打断已经开始的线程的方法
判断状态是否大于0 且thread不为空 且thread没有被打断
就试图去中断线程
}