当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:15:00  来源:本站整理

解析java.util.concurrent锁[Java编程]

赞助商链接



  本文“解析java.util.concurrent锁[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

1. 导言

程序的性能解析是利用程序开辟历程中的一个重要方面.这个工作普通是由一些专业人员来完成的,他们的目标是在一个特定的平台上,提高代码的性能.当程序是运行在多核平台的多线程大概并路程序的时刻,提高性能这个问题就变得越发艰难了.因为在这样的情形下,不但需求考虑代码的性能,还需求考虑代码的可伸缩性.

随着Java 5中引入了java.util.concurrent (JUC)包,在Java语言中呈现了一种新的锁.JUC包利用得越来越广泛,因为更多的利用程序需求为了多核系统而开辟或细心地调优.固然JLM可以找到传统的Java锁的具体的竞争信息,但是却没有一样的工具可以找到java.util.concurrent.locks包的锁竞争信息. Sun/Oracle、IBM,还有其他Java厂商也都没有这样的工具.贫乏对JUC锁的解析工具恰是我们开辟这个锁工具,jucprofiler(Multicore SDK的一部份)的动机.

2. jucprofiler概览

当在程序中利用JUC锁的时刻,线程会在下面两种情形下“终止”履行:

当线程A试图去得到一个JUC锁,但这个锁却已经被别的一个线程得到,那么线程A不得不“终止”,直到这个锁被释放大概超时.

当线程A调用了java.util.concurrent.locks.Condition的肆意一个“等候”的API,线程A会终止履行,直到别的一个线程告诉它大概超时.

我们辨别把这两种情形称作“锁竞争时间”和“等候时间”.

jucprofiler就是为了捕捉以上两种情形的时间开销而计划和实现的.

2.1. 代码改正(Instruments)

为了获得JUC锁的运行时数据,需求提早改正一些JUC类,然后替换掉JRE中呼应的类.在初次利用jucprofiler之前,用户需求运行号令去生成PreInstrument.jar.假定JRE没有改变的话,这个步骤只需求做一次.(假如用户改变了JRE,那么用户需求自己删除 PreInstrument.jar,然后重新运行这个号令,来再次生成PreInstrument.jar).

2.1.1. 锁竞争时间开销

关于锁竞争时间开销,jucprofiler记录了申请类 java.util.concurrent.locks.AbstractQueuedSynchronizer 和类java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject的实例,并且给这些实例分配唯一的标识.

办法 调用位置
java.util.concurrent.locks.LockSupport park (Object); 类AbstractQueuedSynchronizer中的办法parkAndCheckInterrupt()
  parkNanos(Object blocker, long nanos) 类AbstractQueuedSynchronizer中的办法doAcquireNanos(int arg, long nanosTimeout)与doAcquireSharedNanos(int arg, long nanosTimeout)

2.1.2. 锁等候时间开销

关于锁等候时间开销,jucprofiler获得了在差别的位置调用类java.util.concurrent.locks.LockSupport的办法park(blocker)与parkNanos(blocker, nanos)的时间开销:

办法 调用位置
java.util.concurrent.locks.LockSupport park (Object); 类 AbstractQueuedSynchronizer除parkAndCheckInterrupt()以外的办法
  parkNanos(Object blocker, long nanos) 类AbstractQueuedSynchronizer除doAcquireNanos(int arg, long nanosTimeout)与doAcquireSharedNanos(int arg, long nanosTimeout) 以外的办法


  以上是“解析java.util.concurrent锁[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 具体解析JavaBeans与Ejb的辨别
  • 解析java.util.concurrent锁
  • 解析Java体系构造对信息安全的支持
  • 解析Java类和对象的初始化历程
  • 解析Java虚拟机死锁的办法
  • <b>解析Java的多线程机制</b>
  • 深化解析Java中webwork的文件上传机制
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .