wait,notify,饿汉模式
- 一.wait,notify方法使用
- 1.1 例子
- 二.wait和sleep区别
- 三.单例模式中的饿汉模式
一.wait,notify方法使用
引入wait和notify为了能够从应用层面上,干预到多个不同线程代码的执行顺序,不是影响系统的线程调度策略.
相当于是在应用程序代码中,让后执行的线程,主动放弃被调度的机会,就可以让先执行的线程,先把对应的代码执行完
1.1 例子
第一个人进去之后,发现ATM机器里面没有钱,会先出来,等有的时候再取,其他人就会竞争这把锁,但是刚刚出来的那个人,也会重新进入到锁竞争中.
但是有一种可能,就是1号进去之后出来,出来再进去,就会一直拿到锁释放锁,进入循环,就造成了***“线程饿死”***
注意:这里的1号是不用被唤醒,直接参与锁竞争即可.
wait在内部的三个工作
1.释放锁
2.进入阻塞等待
3.其他线程调用notify方法,解除阻塞,重新获取到锁
注意事项:
wait和notify必须放到synchronized里面使用
并且必须是同一个锁对象
如果wait是一个对象,notify唤醒的是另一个对象,那么notify唤醒的是哪个对象,那么就是那个对象.
二.wait和sleep区别
三.单例模式中的饿汉模式
只允许创建一个实例的模式,不允许其他再new对象.
在上述代码中,实现了只实例化一个对象的模式
并且提供了私有的构造方法,防止其他再强行实例化对象
如果再实例化对象,就会在编译时期报错.