美文网首页
锁优化方案

锁优化方案

作者: xinxinlimin | 来源:发表于2017-10-31 15:08 被阅读0次

原因:

有一句话说的好,在单核的环境下,并行算法的执行效率差与串行计算;原因就在于对程序上锁与下锁需要消耗CPU资源并由CPU进行调度,同时,锁冲突也会影响效率。所以,在多核时代,即使并行计算大于串行,但锁设计的好坏大大影响程序的执行效率。

措施:

减少上锁时间:即将synchronized的从修饰方法到修饰临界代码块。从而达到降低锁冲突的可能性,进而提高系统的并发能力。

减少锁粒度:感觉与减少上锁时间大差不差。其中讲到了ConcurrentHashMap的安全实现机制:其中就是对put与get方法上锁,如果我们自己写一个线程安全hashmap,会用synchronized或者重入锁对put、set方法上锁,而Collections.SychronaziedMap(new HashMap)也是这么做的,但我们讨论的是更高效的ConcurrentHashMap,而它并不是完全上锁,而是在put时,首先比较hashcode,之后上锁,因为对于两个put线程,若hash表中没有冲突,则及时两个线程谁先存入,都不会影响后一个的put,而若hashcode相同,则会有影响。所以,可以将put操作分成16个段,这样就可以最多有16个线程同时完成插入操作。

然而,这种操作也有一定的弊端:即在进行size操作时,不如直接上锁来的效率高,具体细节不祥。

读写分离代替独占锁:上一章已经说过

锁分离:指定义相同类型但不同名字的锁,这样就可以减少锁冲突。比如:在LinkedBlockingQueue中,take与put方法本是互不影响的,仅仅是两个put线程不能同时、两个take线程不能同时,而take与put无关紧要。一般的设计会定义一个ReentrantLock 对所有操作一改.lockInterruptibly(),而考虑到上述特性,定义不同锁:takelock与putlock,可以大大减少锁冲突。

锁粗话:合并锁

Java虚拟机对锁优化的措施:锁偏向、轻量级锁、自旋锁、锁消除等,程序员可以根据不同锁的定义以及使用场景动态的配置jvm参数,从而设置指定锁。

人手一只笔:ThreadLocal 表示为每一个线程定义一个自己独有的资源。

解决死锁的方式:重入锁的中断与限时等待。

相关文章

  • 锁优化方案

    原因: 有一句话说的好,在单核的环境下,并行算法的执行效率差与串行计算;原因就在于对程序上锁与下锁需要消耗CPU资...

  • MS汇总

    数据库相关[MS-关于锁(乐观锁,悲观锁,行锁、表锁,共享锁,排他锁)Mysql索引优化Mysql查询优化Mysq...

  • Java高并发实战,锁的优化

    锁优化 这里的锁优化主要是指JVM 对 synchronized 的优化。 自旋锁 互斥同步进入阻塞状态的开销都很...

  • 安卓 关于 Activity 背景图 内存优化 方案

    未优化前 优化方案 优化后

  • SQL锁优化问题

    关于SQL锁。SQL优化少不了SQL锁优化 1.SQL常见锁有:共享锁 作用于查询操作(Select) 2.排他锁...

  • iOS 优化方案

    一、性能优化基本方案 1、卡顿原因以及避免方案2、耗电优化3、启动优化4、安装包瘦身 二、卡顿优化原因以及避免方案...

  • Java虚拟机的锁优化

    JDK内部的优化策略主要包括以下几点 锁偏向 轻量级锁 自旋锁 锁消除 1.锁偏向 锁偏向是一种针对加锁操作的优化...

  • 锁优化

    锁优化 JDK6之后对锁的实现引入了大量的优化,如适应性自旋(Adaptive Spinning)、锁消除(Loc...

  • java面试题 --- 并发②

    1. JDK1.6 开始对 synchronized 做了哪些优化?使用了锁升级、锁粗化、锁消除等方式来优化性能。...

  • JVM中的锁优化

    锁优化 Jvm 在加锁的过程中,会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。 什么是锁升级,降...

网友评论

      本文标题:锁优化方案

      本文链接:https://www.haomeiwen.com/subject/wysbpxtx.html