-
锁优化原因
- 加锁会带来性能上的消耗(解决线程同步问题同时)。理解:加锁本身不会带来多少性能消耗,主要在线程的获取锁的过程。
-
锁优化思路
-
尽量不要锁方法
- 普通成员方法上加锁,线程获得的是该方法所在对象的对象锁。此时整个对象是被锁住的。如果该对象提供的多个同步方法是针对不同业务。那么在一个业务处理时,其他不相关的方法也必须wait。
-
缩小同步代码块,只锁数据
- 尽量减少不必要的进入同步块的逻辑代码。例,先判断条件,符合的再进入同步块之类的。
-
锁中尽量不要再包含锁
-
例如:同步块中调用同步方法之类的情况。
synchronized(A){ B b=objArrayList.get(0); b.method();//这是一个同步方法 } 解决: { B b=null; synchronized(A){ b=objArrayList.get(0); } b.method(); }
-
-
将锁私有化,在内部管理锁
-
进行适当锁分解
-