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的时候就开门.
Synchronized和Volatile
最新推荐文章于 2023-04-07 10:58:49 发布