Synchronized各种使用方法

Synchronized修饰实例方法允许不同对象并发,而修饰静态方法则限制不同对象并发。对类加锁影响所有实例,对特定对象加锁仅影响该对象。使用字符串或基础类型包装类作锁对象可能导致意外共享,降低并发效率。Synchronized确保数据可见性和阻止指令重排序,保证线程安全。
摘要由CSDN通过智能技术生成
  1. 修饰 实例方法 ,这种情况不同的对象之间是可以并发的。等于给对象加锁

  2. 修饰 静态方法 ,这种情况下不同的对象是不能并发的,但是不同的类之间可以进行并发。等于给类加锁

  3. 修饰 多个方法 ,这多个方法在同一时刻只能有一个方法被执行,而且只能有一个线程能够执行。等于给对象加锁

  4. 修饰 实例方法代码块,同一个时刻只能有一个线程执行代码块。等于给对象加锁

  5. 修饰 静态方法代码块,同一个时刻只能有一个线程执行这个代码块,而且不同的对象之间不能够进行并发。等于给类加锁

  6. 应该用什么对象作为锁对象,建议不要使用字符串和基本类型的包装类作为锁对象,因为Java对这些进行优化,很可能多个对象使用的是同一个锁对象,这会大大降低程序的并发度。

  7. 程序在进入和离开Synchronized代码块的时候都会将线程的工作内存刷新到内存当中,以保证数据的可见性,这一点和volatile关键字很像,同时Synchronized代码块中的指令不会和Synchronized代码块之前和之后的指令进行重排序,但是Synchronized代码块内部可能进行重排序。

总结: 1-5点,主要看对谁进行了加锁,多线程执行时,就必须获取到对应的锁才能对Synchronized修饰的代码进行执行

具体案例参考 https://baijiahao.baidu.com/s?id=1740505389877266267&wfr=spider&for=pc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值