Worker对象

发布时间 2023-07-10 10:47:48作者: 啥123
private final class Worker
        extends AbstractQueuedSynchronizer  //线程中断
        implements Runnable  //存储需要执行的任务
{

    private static final long serialVersionUID = 6138294804551838833L;

//    工作线程的Thread对象,初始化时候构建出来的
    final Thread thread;
//  需要执行的任务
    Runnable firstTask;

    volatile long completedTasks;


    Worker(Runnable firstTask) {
//        刚刚初始化的工作线程不允许被中断
        setState(-1); // inhibit interrupts until runWorker
//        第一次new的时候,会将任务赋值给firstTask
        this.firstTask = firstTask;
//        给Worker构建Thread对象
        this.thread = getThreadFactory().newThread(this);
    }

//   调用t.start()  执行当前的run方法
    public void run() {
        runWorker(this);
    }


//  中断线程不是立即让线程停止,只是让thread的中断标识设置为true
    protected boolean isHeldExclusively() {
        return getState() != 0;
    }

    protected boolean tryAcquire(int unused) {
        if (compareAndSetState(0, 1)) {
            setExclusiveOwnerThread(Thread.currentThread());
            return true;
        }
        return false;
    }

    protected boolean tryRelease(int unused) {
        setExclusiveOwnerThread(null);
        setState(0);
        return true;
    }

    public void lock()        { acquire(1); }
    public boolean tryLock()  { return tryAcquire(1); }
    public void unlock()      { release(1); }
    public boolean isLocked() { return isHeldExclusively(); }

    void interruptIfStarted() {
        Thread t;
        if (getState() >= 0 && (t = thread) != null && !t.isInterrupted()) {
            try {
                t.interrupt();
            } catch (SecurityException ignore) {
            }
        }
    }
}