线程状态转移之wait、join和sleep
📌sleep、wait和join的区别
区别 | sleep | wait | join |
---|---|---|---|
概念 | 线程休眠 | 线程等待 | 线程等待 |
方法 | Thread类的静态方法 | Object类的成员方法 | Thread类的成员方法 |
参数 | 必须有时间参数((long millis) | 非必须,可以无参也可有时间参数 | 非必须,可以无参也可有时间参数 |
状态 | 调用后进入timed_waiting | 无参则waiting有参则timed_waiting | 无参则waiting有参则timed_waiting |
竞争锁 | 不涉及锁 | 必须有锁 | 不涉及锁 |
🎯使用 | 只关注休眠时间 | 📌调用前需要先获得锁,调用后会释放锁进入等待状态; 📌如果是带时间参数,则等待时间结束重新获得锁,如果超时等待过程中notify或者notifyAll也会被唤醒; 📌如果是无参,需要notify或者notifyAll来唤醒,然后重新获得锁 | 📌重点在于谁是“主线程”,有参则主线程等待子线程的参数的时间,无参则知道子线程执行结束再开始执行。 |
🎯状态转移图:
🎯知识点传送门🚪