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则用于存储键值对数据。

  • 相关阅读:
    IDEA去除代码重负导致的波浪黄线
    java代码里出现中文乱码怎么解决
    准备接入个人支付接口?看完这几款支付产品再做决定!
    个人网站选择支付宝api
    PayPay猪 文档中心
    如何让input的值根据select改变
    Visual Studio运行VC++
    腾讯视频转mp4
    重要网址
    ANSYS笔记本
  • 原文地址:https://www.cnblogs.com/sg9527/p/8006640.html
Copyright © 2011-2022 走看看