synchronized 添加位置不同代表含义

 

https://blog.csdn.net/ustcyy91/article/details/78752149

对当前对象加锁(对象锁对于不同的对象实例没有锁的约束)实例对象被lock,则该实例对象的所有同步方法全被lock;synchronized methods(){} 与synchronized(this){}之间没有什么区别。只是synchronized methods(){} 便于阅读理解,而synchronized(this){}可以更精确的控制冲突限制访问区域,有时候表现更高效率。
synchronized 块是这样一个代码块,其中的代码必须获得对象 syncObject (如前所述,可以是类实例或类)的锁方能执行,具体机制同前所述。由于可以针对任意代码块,且可任意指定上锁的对象,故灵活性较高。
synchronized(this) {}
public void synchronized save();
对当前类加锁(多线程中,不同的对象,类锁具有约束性)若类对象被lock,则类对象的所有同步方法全被lock
A.class当前类
synchronized(A.class) {}
public void static synchronized save();
在上边的例子中试图使用这种方法达到互斥方法打印方法,但是事实是这样做是没有效果的,因为每个Trans对象都有自己的Object对象,这两个对象都有自己的锁,所以两个线程需要的是不同锁,两个锁之间没有任何相互作用,不会起到同步作用。
private Object lock = new Object();
synchronized(lock) {}
不同的类使用的就是同一个object对象,需要的锁也是同一个锁,就可以达到互斥的效果了。
private static Object lock = new Object();
synchronized(lock) {}

https://www.cnblogs.com/lixuwu/p/5676143.html

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值