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

  • 相关阅读:
    IE11和传统asp.net的兼容问题
    时区和夏令时
    GTA项目 三, 使用 bootstrap table展示界面,使得data和UI分离
    GTA项目 二, JSON接口开放跨域访问
    GTA项目 一, 包装外部WebService
    DNS域名解析
    CRM 迁移服务器备忘
    CentOS6.5 安装HAProxy 1.5.20
    Custom IFormatProvider
    数据分区考虑
  • 原文地址:https://www.cnblogs.com/sg9527/p/8006640.html
Copyright © 2020-2023  润新知