Java线程状态过程图
2021-12-24 09:28:32 1 举报
Java线程的6种状态及切换
作者其他创作
大纲/内容
实例化
计时等待(TIMED_WAITING)
wait()会让当前线程进入等待状态,是 Object 类的方法,会释放对象锁,并让出 CPU 资源。只能在 synchronized 下使用,使用 notify() 或 notiftAll() 唤醒。
timeout时间到
join的线程运行结束|被中断
LockSupport.parkNanos(long) LockSupport.parkUntil(long)
开始
结束
Object.notify()Object.notifyAll()
LockSupport.unpark()
join的线程运行结束|被中断|timeout时间到
进入synchronized保护代码但没有拿到锁
运行中
Thread.start()
Object.sleep(long)
等待(WAITING)
系统调度
Object.notify()Object.notifyAll()timeout时间到
LockSupport.park()
就绪
获取到锁
阻塞(BLOCKED) 仅仅针对 synchronized monitor 锁,可是在 Java 中还有很多其他的锁,比如 ReentrantLock,如果线程在获取这种锁时没有抢到该锁就会进入 Waiting 状态,因为本质上它执行了 LockSupport.park() 方法,所以会进入 Waiting 状态。同样,Object.wait() 和 Thread.join() 也会让线程进入 Waiting 状态。
Thread.join()
Thread.join(long)
运行(RUNNABLE)
阻塞(BLOCKED)
终止(TERMINATED)
yield()系统调度
LockSupport.unpark()|timeout时间到
Object.wait()
Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行(RUNNABLE)。 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。 yield()的作用是让步,它能够让当前线程从“运行状态”进入到“就绪状态”,从而让其他等待线程获取执行权,但是不能保证在当前线程调用yield()之后,其他线程就一定能获得执行权,也有可能是当前线程又回到“运行状态”继续运行
初始(NEW)
Object.wait(long)
收藏
0 条评论
下一页