如果当前等待线程被中断
从队列中删除表示该线程的WaitNode,并抛出中断异常
s>COMPLETING,如果任务已经跑完,返回完成状态s,并把WaitNode的thread设置为null,后续在执行removeWaiter的时候,会清理掉thread为null的WaitNode
s==COMPLETING,正在设置结果,yield自旋等待
q==null,还不存在该线程对应的WaitNode,则创建一个并赋值给q,在下一轮中循环中添加到队列中
!queued,上一步骤建立的WaitNode添加到队列中
timed,等待给定的时间
时间到后,醒来干掉对应线程的WaitNode,并返回当前任务的状态
当不满足上述所有条件的时候,等待知道任务完成或者被中断