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

posted on 2017-12-08 18:12  一个帅哥9527  阅读(284)  评论(0编辑  收藏  举报