synchronized
线程安全问题的主要诱因
- 存在共享数据(也称临界资源)
- 存在多条线程共同操作这些共享数据
解决问题的根本办法:
同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再对共享数据进行操作
synchronized 锁的不是代码,锁的都是对象
synchronized 底层实现原理
对象在内存中的布局
- 对象头
- 实例数据
- 对齐填充
Monitor:每个java对象天生自带一把看不见的锁
synchronized 和 ReentrantLock