锁的优化
1. 锁的优化有哪些手段?
(1)降低 锁 的范围 例如:将方法上的锁可以加到 代码快上
(2)锁分离:读读之间不需要同步,读写和写写之间才需要同步,例如:读写锁
锁分离延伸:只要操作互不影响,就可以锁分离,例如 LinkedBlockingQuene
(3)减少锁力度:将一个大对象拆分成对个小对象,每个小对象可以被一个线程访问,例子:CurrentHashMap
(4)锁粗化:为了保证多线程间的有效并发,会要求每个线程持有锁的时间尽量短,即在使用完 公共资源后,应该立即释放锁。只有这样,等待在这个锁上的其他线程才能尽早的获得资源执行 任务。但是,凡事都有一个度,如果对同一个锁不停的进行请求、同步和释放,其本身也会消耗 系统宝贵的资源,反而不利于性能的优化
例子:for循环中 锁 加在循环外比 加载循环里 好
public void demoMethod(){ synchronized(lock){
//do sth. }
//做其他不需要的同步的工作,但能很快执行完毕
synchronized(lock){
//do sth. }
}
==》粗化:
==》粗化
(5)锁消除:在即时编译器时,如果发现不可能被共享的对象,则可以消除这些对象的锁操作
名称:不可被共享的对象(方法中声名的对象,且没有越界:没有将该对象return)
例如:StringBuffer不可被共享,但StringBuffer是线程安全的,所有需要去掉锁
2. 什么是大对象?
答:多个线程需要同时访问的对象
3. 锁消除是在哪儿做?
答:在 JVM中
以上是 锁的优化 的全部内容, 来源链接: utcz.com/z/511754.html