sleep和wait的区别
时间: 2024-05-27 07:14:08
浏览: 11
sleep和wait都是Java中用于线程控制的方法,但它们的[作用](https://geek.csdn.net/educolumn/1006730a19828887f70dae3b8cbe1e07?spm=1055.2569.3001.10083)和使用[方式](https://geek.csdn.net/educolumn/0a7fca90472e8d39fd3078246e0b14f3?spm=1055.2569.3001.10083)不同。
sleep方法是Thread类中的一个[静态](https://geek.csdn.net/educolumn/0a3c9f6ef0bfa1fb4de4b888c820aff8?spm=1055.2569.3001.10083)方法,它可以让当前线程暂停执行一段时间,并释放CPU资源。sleep方法的参数表示线程暂停的时间,单位是毫秒。在暂停期间,线程会进入阻塞状态,但不会释放锁资源。
wait方法是Object类中的一个实例方法,它可以让当前线程暂停执行,并释放锁资源。wait方法的调用者必须持有锁资源,否则会抛出IllegalMonitorStateException异常。wait方法有两个重载方法,一个是不带参数的wait方法,表示线程无限期等待,直到其他线程调用notify或notifyAll方法唤醒它;另一个是带参数的wait方法,表示线程等待一段时间后自动唤醒,或者其他线程调用notify或notifyAll方法唤醒它。
因此,sleep方法和wait方法的区别在于:
1. sleep方法是Thread类的[静态](https://geek.csdn.net/educolumn/0a3c9f6ef0bfa1fb4de4b888c820aff8?spm=1055.2569.3001.10083)方法,而wait方法是Object类的实例方法。
2. sleep方法暂停当前线程执行一段时间,不释放锁资源;wait方法暂停当前线程执行并释放锁资源,只有其他线程调用notify或notifyAll方法才能唤醒它。
3. sleep方法不需要持有锁资源,可以在任何地方调用;wait方法必须在同步[代码块](https://geek.csdn.net/educolumn/03f496d69dbfe77aa790148934254765?spm=1055.2569.3001.10083)中调用,并持有锁资源,否则会抛出IllegalMonitorStateException异常。
相关问题
java中sleep和wait区别
sleep方法和wait方法都可以让线程进入阻塞状态,但是它们有一定的区别:sleep方法不会释放锁,而wait方法会释放锁,wait方法可以使多个线程进