侧边栏壁纸
  • 累计撰写 781 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

synchronized

Dettan
2021-04-10 / 0 评论 / 0 点赞 / 99 阅读 / 612 字
温馨提示:
本文最后更新于 2022-04-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
原生同步机制体系
当一个线程进入一个方法的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();
}



0

评论区