Java多线程(JUC)-线程生命周期图示
2021-03-24 18:19:02 0 举报
java多线程生命周期状态转移
作者其他创作
大纲/内容
获取锁
RUNNABLE(可运行)
new
Thraed.sleep(long millis)Object.wait(long timeout)Thread.join(long millis)LockSupport.parkNanos(long nanos)LockSupport.parkUntil(long deadline)
T.sleep()T2.join()等待用户输入
Object.wait() Thread.join()LockSupport.park()
Thread T = new Thread();
RUNNING(运行中)
LockSupport.unpark(Thread)Object.notify()Object.notifyAll()
T.wait()
READY(就绪)
Thread.start()
OS系统调用
锁池队列
程序运行结束
WAITING(等待)
等待队列
BLOCKED(阻塞)
CPU时间片用完调用T.yield(),让出CUP
Thread$State枚举类public enum State {font color=\"#00994d\
OS选中,T获取CPU时间片
TERMINATED(终止)
terminated
TIMED_WAITING(超时等待)
yeild(),让出CPU时间片
NEW(新建)
其他线程调用notify(),notifyAll()
等待获取监视器锁synchronized
假设一个线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁(因为wait()方法必须出现在synchronized中,这样自然在执行wait()方法之前线程A就已经拥有了该对象的锁),同时线程A就进入到了该对象的等待池中。如果另外的一个线程调用了相同对象的notifyAll()方法,那么处于该对象的等待池中的线程就会全部进入该对象的锁池中,准备争夺锁的拥有权。如果另外的一个线程调用了相同对象的notify()方法,那么仅仅有一个处于该对象的等待池中的线程(随机)会进入该对象的锁池
等待时间到LockSupport.unpark(Thread)Object.notify()Object.notifyAll()
Java线程状态转移(JDK源码)
NON-RUNNABLE(休眠状态)
blocked
running
T.start()
T.sleep()结束T2执行结束用户输入完毕
runable
Java线程状态转移(概况)
假设线程A已经拥有了某个对象(注意:不是类)的锁而其它的线程想要调用这个对象的某个synchronized方法(或者synchronized块),由于这些线程在进入对象的synchronized方法之前必须先获得该对象的锁的拥有权,但是该对象的锁目前正被线程A拥有,所以这些线程就进入了该对象的锁池中。
获取监视器锁
0 条评论
回复 删除
下一页