新建状态没有和操作系统底层线程关联,没有分配cpu。获得锁,调用wait方法等待条件满足,会进入waiting状态,进入waiting状态会释放锁,当被notify的时候被唤醒,然后去争抢锁,争抢锁成功了变成运行态,如果争抢锁不成功会进入blocking状态。
当核心线程都在繁忙,任务队列也放满了,再添加新任务,救急线程就上场。 救急线程受到3和4的影响,如果在此时间范围内,没有任务执行,救急线程就会溜溜球。
拒绝策略:核心线程繁忙,任务队列满了,不能再创建更多的救急线程。此时再来新任务,要使用拒绝策略。可以是抛异常,可以是让submit的对象自己执行,即callerRunsPolicy.把任务丢弃,或者把队列中最老的任务丢弃。一共四种拒绝策略。
sync使用wait和notify实现同步,lock使用await,singnal实现同步.lock提供公平锁,sync只支持非公平锁,sync不支持打断,不支持超时.sync只有一共等待队列,lock支持多个等待队列.如果锁是非公平的:那么获取锁的线程不一定是等待队列中的线程。
ThreadLocal本质是线程独有的map,key设置为弱引用是为了gc的时候释放内存。