synchronized锁对象

synchronized锁的是对象大家都知道,今天写一个小例子测试一下,如果锁的不是同一个对象,锁一定会失效。
场景1:
Synchronized和非synchronized方法可以同时运行,如果在sync执行时间长,而此时同一个对象又调用了非sync方法,就会出现脏读
在这里插入图片描述
在这里插入图片描述
读锁未加,读线程在写线程未完成的情况下就插入执行,此时数据脏读。
解决:加读锁,此时锁住同一个对象,读写互斥。
在这里插入图片描述

场景2:如何确定是锁定是统一对象?
我们来测试一下,新建对象读取,此时是加了读写锁的,但是仍锁不住。
在这里插入图片描述

————————————————
如果锁定的对象为空,会空指针
在这里插入图片描述
在这里插入图片描述
synchronized锁注意事项
1.粒度小
2.用对象做锁的时候用final修饰,防止其他位置对其重新初始化(final可以使用反射来改)
3.不要用string来当锁,如果程序jar或其他地方也用了同一个字符串当锁,会出问题

synchronized的使用方法:

1.实例方法 锁当前实例对象,如果当前对象有多个实例,多个实例同时调用一个加锁方法,不受影响

2.静态方法 类级别的,只要是一个类的对象,不管有几个实例,锁对所有实例有效

3.代码块 如果锁当前实例对象 同实例方法,如果锁是类对象,同静态方法级别

关于锁还有很多,后续我会继续总结。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值