原生同步机制体系
•
当一个线程进入一个方法的synchronized A后,其它线程是否可以进入此对象的synchronized方法B?
不能进入, 因为非静态方法上的synchronized修饰符要求执行方法时要获得对象的锁.对象会进入"等锁池"
1. synchronized
即这段代码只能由一个线程同时运行。
两种方法:
synchronized (Object) { //可以嵌套}
synchronized 修饰函数,
注意有个Object类型锁对象,同步是根据锁对象同步,即有相同锁对象的同步代码块不会穿插执行。
同步函数的锁对象是this 即是方法所属的类的实例;
静态同步函数的锁对象是方法所属的类 用className.class 获取
等待/通知机制
o可以是synchronized()括号里的对象,以可以使自定义的锁。
o.wait() 让当前锁的线程等待,并释放资源,一般会再执行notify()。
o.notify() 唤醒一个等待当前锁的线程,若多个则随机唤醒。
o.notifyAll() 全部唤醒
使用规则
•
使用前需要先加锁
•
notify 后, 别notify的线程不会从wait()返回, 要释放锁后才行.
范式
synchronized (对象){
while(条件不满足){
对象.wait();
}
对应的处理逻辑
}
synchronized (对象){
改变条件
对象.notifyAll();
}
评论区