zoukankan      html  css  js  c++  java
  • java 提高锁性能 方法

    1、减少锁持有时间:(根据有效的条件去减少锁住的代码)

       public Matcher matcher(CharSequence input) {
            if (!compiled) {
                synchronized(this) {
                    if (!compiled)
                        compile();
                }
            }
            Matcher m = new Matcher(this, input);
            return m;
        }
    

    2、减少锁的颗粒度(将大面积分成小面积)

      ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键值对数据。

      一个Segment里包含一个HashEntry数组,每个HashEntry是一个链表结构的元素,每个Segment守护一个HashEntry数组里的元素,当对HashEntry数组的数据进行修改时,必须首先获得它对应的Segment锁。 

    3、读写分离锁替代独占锁

      在读远远大于写操作的系统中,用读写锁

    4、分离锁

      如:BlockingQueue中的put(),take(),就是分离锁操作,相互独立

    5、锁粗化(和减少锁的颗粒度相反,主要是减少锁的使用频率)

      如:for(int i=0;i....){

          synchronized(lock){}

        }

      应该优化为

        synchronized(lock){  for(.....){}  }

           这样避免了频繁的获取锁,和释放锁

    ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键值对数据。

  • 相关阅读:
    pycharm远程SSH调用服务器python解释器教程
    SVN自动生成版本号信息
    gtest运行小析
    记一次问题排查心得
    Effective STL读书笔记
    模板单例实现
    NetLimiter网速测试小坑
    客户端升级项目小结
    长训总结
    科目二心得体会
  • 原文地址:https://www.cnblogs.com/sg9527/p/8006640.html
Copyright © 2011-2022 走看看