减少锁持有时间
减少锁粒度
- 将大对象拆分成小对象,增加并行度,降低锁竞争。
- ConcurrentHashMap允许多个线程同 时进入
锁分离
- 根据功能进行锁分离
- ReadWriteLock在读多写少时,可以提高性能。
锁消除
- 锁消除是发生在编译器级别的一种锁优化方式。
- 有时候我们写的代码完全不需要加锁,却执行了加锁操作。
锁粗化
通常情况下,为了保证多线程间的有效并发,会要求每个线程持有锁的时间尽可能短,但是在某些情况下,一个程序对同一个锁不间断、高频地请求、同步与释放,会消耗掉一定的系统资源,因为锁的请求、同步与释放本身会带来性能损耗,这样高频的锁请求就反而不利于系统性能的优化了,虽然单次同步操作的时间可能很短。锁粗化就是告诉我们任何事情都有个度,有些情况下我们反而希望把很多次锁的请求合并成一个请求,以降低短时间内大量锁请求、同步、释放带来的性能损耗。