java锁——wait,notify,synchronized

背景:这篇博客用来总结java锁相关的知识点,平时还是要自己多加练习

wait 和 notify以及notifyAll

(1)、方法介绍
1.wait、notify以及notifyAll都是Object对象的方法,他们必须在被 synchronized 同步的方法或代码块中调用,否则会报错。
2. 调用wait方法会使该线程进入等待状态,并且会释放被同步对象的锁。
3. notify操作可以唤醒一个因执行wait而处于阻塞状态的线程,使其进入就绪状态,被唤醒的线程会去尝试着获取对象锁,然后执行wait之后的代码。如果发出notify操作时,没有线程处于阻塞状态,那么该命令会忽略。注意执行notify并不会马上释放对象锁,会等到执行完该同步方法或同步代码块后才释放,下面会有例子来证明。
notify方法可以随机唤醒等待队列中等待同一共享资源的“一个”线程,使其退出等待队列进入可运行状态。

4. notifyAll方法可以唤醒等待队列中等待同一共享资源的“全部”线程从等待状态退出,进入可运行状态。此时,优先级最高的那个线程优先执行,但也有可能是随机执行,这取决于JVM虚拟机的实现。

最后说下 wait和sleep的区别,这也是面试经常面到的问题。

1.sleep是Thread类的方法而wait是Object类的方法。
2.sleep不会立马释放对象锁,而wait会释放。

java 多线程之wait、notify详解(讲的不错)

java锁之wait,notify(wait会释放锁,notify仅仅只是通知,不释放锁)

Java的wait(), notify()和notifyAll()使用小结

原文地址:https://www.cnblogs.com/lixuwu/p/10534787.html