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

  • 相关阅读:
    KVM WEB管理工具——WebVirtMgr(二)日常配置
    在阿里云上遇见更好的Oracle(四)
    Django源码分析之权限系统_擒贼先擒王
    Django源码分析之server
    Django源码分析之执行入口
    HDFS常用文件操作
    排查实时tail功能cpu占用过高问题
    ZooKeeper完全分布式安装与配置
    Hadoop2.5.2集群部署(完全分布式)
    构造器
  • 原文地址:https://www.cnblogs.com/sg9527/p/8006640.html
Copyright © 2011-2022 走看看