目录
总览

各种情况
情况 1:新建线程
NEW --> RUNNABLE
调用 t.start()
情况 2:永久等待
RUNNABLE <--> WAITING
线程 t synchronized(obj) 获取锁之后
1、t.wait(),RUNNABLE --> WAITING
2、obj.notify(),obj.notifyAll(),t.interrupt()
2.1、竞争锁成功:WAITING <--> RUNNABLE
2.2、竞争锁失败:WAITING <--> BLOCKED
情况 3:等待其他线程
RUNNABLE <--> WAITING
1、线程 t 中调用 t1.join() RUNNABLE <--> WAITING
2、t1 结束运行或者 t.interrupt() WAITING <--> RUNNABLE
情况 4:park && unpark
RUNNABLE <--> WAITING
1、线程 t 中调用 LockSupport.park() RUNNABLE <--> WAITING
2、LockSupport.unpark(t) 或者 t.interrupt() WAITING <--> RUNNABLE
情况 5:有时限等待
RUNNABLE <--> TIMED_WAITING
线程 t synchronized(obj) 获取锁之后
1、t.wait(long n),RUNNABLE --> TIMED_WAITING
2、t 等待时间超过 n 毫秒 TIMED_WAITING <--> RUNNABLE
3、obj.notify(),obj.notifyAll(),t.interrupt()
3.1、竞争锁成功:TIMED_WAITING <--> RUNNABLE
3.2、竞争锁失败:TIMED_WAITING <--> BLOCKED
情况 6:有时限等待其他线程
RUNNABLE <--> TIMED_WAITING
1、线程 t 中调用 t1.join(long n) RUNNABLE <--> TIMED_WAITING
2、t 等待时间超过 n 毫米 TIMED_WAITING <--> RUNNABLE
3、t1 结束运行或者 t.interrupt() TIMED_WAITING <--> RUNNABLE
情况 7:睡眠
RUNNABLE <--> TIMED_WAITING
1、线程 t 中调用 t1.sleep(long n) RUNNABLE <--> TIMED_WAITING
2、t 睡眠时间超过 n 毫米 TIMED_WAITING <--> RUNNABLE
情况 8:有时限 park
RUNNABLE <--> TIMED_WAITING
1、线程 t 中调用 LockSupport.parkNanos(long nanos) 或者 LockSupport.parkNanos(long nanos) RUNNABLE <--> TIMED_WAITING
2、LockSupport.unpark(t) 或者 t.interrupt() TIMED_WAITING <--> RUNNABLE
情况 9:竞争锁
RUNNABLE <--> BLOCKED
1、线程 t synchronized(obj) 获取锁失败 RUNNABLE <--> BLOCKED
2、其他线程执行完同步代码块,或唤醒该锁上所以 BLOKED 线程重新竞争
2.1、t 竞争成功 EBLOCKED <--> RUNNABL
2.2、t 竞争失败 BLOCKED
情况 10:运行完毕
RUNNABLE <--> TERMINATED
线程所以代码运行完毕 RUNNABLE <--> TERMINATED
本文详细解读了Java中线程创建、等待、竞争锁等10种核心并发行为,包括新建线程、永久等待、定时等待等,并通过实例阐述了每种情况的转换流程。

被折叠的 条评论
为什么被折叠?



