**优化方案:锁消除、锁粗化、偏向锁、轻量级锁、自旋锁**
1. 锁消除:部分内部源码存在着关键字synchronize,(如Vector),但有时用不到这个锁, 所以在编译时会消除这个锁。来提高性能。
2. 锁粗化:我们知道在使用同步锁的时候,需要讲同步范围缩小,减小每个线程持有锁的时间。
3. 偏向锁:偏向,如名字所言,会偏向于第一个访问的线程, 如果运行过程中,只有一个线程,不存在多线程的情况,不需要触发同步,则加一个偏向锁。遇到了别的线程抢锁,会消除他的偏向锁,恢复到标准的轻量锁。 (即只有一个线程,无竞争时同步原线程,提高了程序的运行)
4. 自旋锁:对多线程并发时频繁的挂起和恢复线程的操作问题的锁, 有时锁的等待时间可能很短,频繁的挂起和恢复相比执行空时间消耗大。所以选择将线程一直处于工作状态,当线程获取了锁就会继续执行代码。 否则执行空。
5. 轻量级锁:(与轻量级锁对应的是重量级锁: synchronize) 轻量级锁所适应的场景是线程交替执行同步块的情况,