JAVA多线程-Lock的使用(三)-Lock与Condiition相关的方法

来源:互联网 发布:mac系统外置光驱 编辑:程序博客网 时间:2024/05/16 17:08

Lock与Condiition相关的方法

    1、int lock.getHoldCount():查询当前线程保持锁定的个数,也就是调用lock()方法的次数

    2、int lock.getQueueLength():返回正在等待获取此锁定的线程估计数。

          比如:有5个线程,有一个首先执行await()方法,那么调用该方法后返回值为4,说明有4个线程同时在等待lock的释放。

    3、int lock.getWaitQueueLength(Condition condition):返回等待与此锁定相关的给定条件condition的线程估计数

         比如:有5个线程,每个线程都执行了同一个condition对象的await()方法,则调用该方法是返回的int值为5。

    4、boolean lock.hasQueueThread(Thread thread):查询指定的线程是否在等待获取此锁定。

    5、boolean lock.hasWaiters(Condition condition):查询是否有线程正在等待与此锁定有关的condition条件。

    6、boolean lock.isFair():判断是不是公平锁。

    7、boolean lock.isHeldByCurrentThread():查询当前线程是否保持此锁定。

    8、boolean lock.isLocked():查询此锁定是否有任意线程锁定。

    9、void lock.lockInterruptibly():如果当前线程未被中断,则获取锁定,如果已经被中断则出现异常。

          解释说明:lock.lockInterruptibly()方法是用来替换lock.lock(),在获取锁定中,如果遇到interrupt,则出现异常。

         而lock()方法,则不会抛出异常,继续执行。

    10、boolean lock.tryLock():仅在调用锁定未被另一个线程保持的情况下,才获取该锁定。

    11、boolean lock.tryLock(long timeout,TimeUnit unit):如果锁定在给定等待时间内没有被另一个线程保持,且当前线程未被中断,则获取该锁定。

          lock.tryLock(3,TimeUnit.SECONDS)

    12、void lock.awaitUninterruptibly():用来替换lock.await(),遇到interrupt,正常运行不会抛出异常,而await()方法会抛出异常。

    13、void lock.awaitUntil(long timeout):用来替换lock.await(),可以指定多长时间后自动唤醒,在这个时间内,可以被signal()方法唤醒。

0 0