线程状态转换

本文详细解读了Java中线程创建、等待、竞争锁等10种核心并发行为,包括新建线程、永久等待、定时等待等,并通过实例阐述了每种情况的转换流程。

目录

总览

各种情况

情况 1:新建线程

情况 2:永久等待

情况 3:等待其他线程

情况 4:park && unpark

情况 5:有时限等待

情况 6:有时限等待其他线程

情况 7:睡眠

情况 8:有时限 park

情况 9:竞争锁

情况 10:运行完毕


总览

各种情况

情况 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值