多线程基础-线程的六种状态

2024/06/20 Java

线程的六种状态流转图

picture not found
wai和sleep的区别

sleep是Thread类中的方法,参数是一个long类型的毫秒值,等待一定时间,不会释放CPU资源;

wait是Object中的方法,参数可以选择填写毫秒值,等待一定时间,会释放CPU资源。

sleep因为不会释放资源,醒来后会继续执行。

wait如果填写了毫秒值,醒来后需要重新获取锁,才能继续执行;如果没有填写毫秒值,需要被唤醒,否则会无限等待。

wait和notify

wait方法在们没有填写毫秒值的时候需要通过notify或者notifyAll进行唤醒,唤醒之后会进入阻塞状态,抢占锁。

notify方法:

唤醒某一个正在wait()的线程,唤醒是随机的

notifyAll方法:

唤醒所有正在wait()的线程

注意:

wait()和notify()方法的使用并不是任意的,必须是锁对象才能调用,所以只会出现在同步代码块中调用这两个方法。

同时,A锁调用的wait(),只能由A锁来进行notify()

谁上锁,谁解锁

Search

    Table of Contents