Synchronized和Volatile

1.加在动态方法前面 相当于锁定的是这个类的对象, 相当于T.Class 加在代码块和方法前面,相当于锁定的是对象,用this
2.一个类中,有的方法被锁定 有的没有被锁定 需要考虑清楚业务.加锁的代码运行时,其他没加锁的有可能也访问某些数据,会有时间差.叫脏读(ditry read)
3.Sychronized支持重入锁, Sychronized A 里面可以调用Sychronized B方法
重入锁另外一种情形,子类锁调用父类锁.
4.程序运行中如果碰到异常 锁默认会被释放.所以在高并发处理的过程中,有异常要考虑清楚.
5.volatile只保证可见性,sychronized既保证可见性,又保证原子性.
6.使用AtomXXX类,AtomXXX类和方法本身都是原子性的,但不能保证多个方法连续调用时原子性的
一般在++和加法操作的时候用. 源码是用很底层的实现的,比sychronized更高效
7.sychronized锁定的代码块越少越好,同步效率就越高.
8.锁定对象o,如果o的属性发生改变则不影响锁的使用. 如果o变成另外一个对象则锁定的对象发生改变
9.不要以字符串常量作为锁定对象.字符串的常量池,锁定的是同一个对象.
10.wait和notify和notifyAll必须作用于同一个对象,才能达到线程间通信的目的wait释放当前锁,notify不会释放
11.调用wait前必须进行Synchronized操作,要么会抛异常 IllegalMonitorStateException(非法的监控状态异常)
12.对象调用wait后,进入等待状态同时释放锁.notify不会释放锁.
13.门闩(CountDownLatch) 当到达0的时候就开门.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值