zoukankan      html  css  js  c++  java
  • 锁机制(一)

    转自:http://www.blogjava.net/xylz/archive/2010/07/05/325274.html

    JDK 5中的锁是接口java.util.concurrent.locks.Lock。另外java.util.concurrent.locks.ReadWriteLock提供了一对可供读写并发的锁

    1. void lock()

    获取锁。

    如果锁不可用,出于线程调度目的,将禁用当前线程,并且在获得锁之前,该线程将一直处于休眠状态。

    2.void lockInterruptibly() throws InterruptedException;

    如果当前线程未被中断,则获取锁。

    如果锁可用,则获取锁,并立即返回。

    如果锁不可用,出于线程调度目的,将禁用当前线程,并且在发生以下两种情况之一以前,该线程将一直处于休眠状态:

    • 锁由当前线程获得;或者
    • 其他某个线程中断当前线程,并且支持对锁获取的中断。

    如果当前线程:

    • 在进入此方法时已经设置了该线程的中断状态;或者
    • 在获取锁时被中断,并且支持对锁获取的中断,

    则将抛出 InterruptedException,并清除当前线程的已中断状态。

    3.Condition newCondition()

    返回绑定到此 Lock 实例的新 Condition 实例

    4.boolean tryLock();

    仅在调用时锁为空闲状态才获取该锁。

    如果锁可用,则获取锁,并立即返回值 true。如果锁不可用,则此方法将立即返回值 false

    5.boolean tryLock(long time, TimeUnit unit) throws InterruptedException;

    如果锁在给定的等待时间内空闲,并且当前线程未被中断,则获取锁。

    如果锁可用,则此方法将立即返回值 true。如果锁不可用,出于线程调度目的,将禁用当前线程,并且在发生以下三种情况之一前,该线程将一直处于休眠状态:

    • 锁由当前线程获得;或者
    • 其他某个线程中断当前线程,并且支持对锁获取的中断;或者
    • 已超过指定的等待时间

    如果获得了锁,则返回值 true

    如果当前线程:

    • 在进入此方法时已经设置了该线程的中断状态;或者
    • 在获取锁时被中断,并且支持对锁获取的中断,

    则将抛出 InterruptedException,并会清除当前线程的已中断状态。

    如果超过了指定的等待时间,则将返回值 false。如果 time 小于等于 0,该方法将完全不等待。

    6.void unlock();

    释放锁。对应于lock()、tryLock()、tryLock(xx)、lockInterruptibly()等操作,如果成功的话应该对应着一个unlock(),这样可以避免死锁或者资源浪费。

  • 相关阅读:
    asp.net c#中去掉最后一个字符和去掉第一个字母
    两个div并排
    VS.Net2005中使用本地化功能实现多语言的切换
    gridview嵌套DropDownList選定值[转]
    C# 获取系统时间
    NERDTree,好用的文件浏览器
    通过$.browser来判断浏览器
    vim 智能提示
    让vim显示函数列表
    vim中文乱码解决方法
  • 原文地址:https://www.cnblogs.com/jerrice/p/7285990.html
Copyright © 2011-2022 走看看