Synchronized - 对象锁
语法: 最初最好对对象进行封装 |
Synchronized(对象){ 临界区代码 } |
|---|---|
| 方法上的synchronized | 加在普通方法上: 锁住类对象
加在静态方法上: 锁住类的字节码对象(共享且唯一)
|
| 作用 | 1.保证此处的代码执行的原子性,不会有多个线程来搞 但是内部代码仍然可能出现指令的重排序 2.加锁会清缓存,解锁会把缓存写进主存 |
| 去了解一下 JMM 的八大原子操作和规则,对理解这一块儿的东西很有用 | 我的总结就是:在单线程中,值如果读取一定次数不变的情况下,JIT编译器会将值固定给变量(优化,JVM执行状态的5个层次)。 多线程中,因为JIT编译器优化就会导致读取不到最新的值,所以要阻止这种优化。指令重排这个前面老师又讲,这里主要是将没有讲的JVM原理结合 |

