java并发编程(四):java的锁

锁使用来控制多个线程访问共享资源的方式,一般来说一个锁能够防止多个线程同时访问一个资源;

有synchronized 和 Lock

synchronized 将锁的获取和释放固话了,只有现获取再释放;

1,Lock 包含了synchronized 不具备的功能;

(1)尝试非阻塞的获取锁:当前线程尝试获取锁,如果这一时刻锁没有被其它线程获取到,则成功获取该锁;

(2)能被中断的获取锁:获取锁的线程能够响应中断,当获取到锁的线程被中断的时候,中断异常会被抛出,同时锁会被释放;

(3)超时获取锁:在指定的时间内获取锁,如果时间到了还没获取到锁,那么就会返回;

2,Condition

任意java 对象都有一组moniter监控方法wait(),wait(long timout),notify(),notifyall()方法,这些方法与synchronized关键字配合可以实现等待/通知模式;

condition 接口也提供了类似object的监视方法,与Lock配合实现等待/通知模式;

Lock lock =  new ReentrantLock();
Condition condition = lock.newCondition();
/**
 * 调用该方法 表示当前线程释放掉锁  并在此处等待
 */
public void conditionAwait(){
    lock.lock();
    try {
        //类似object.wait() 会释放掉当前锁 
        condition.await();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    finally {
        lock.unlock();
    }
}
/**
 * 其他线程调用该signal(),通知当前线程从wait()中返回,并且返回前已经获取到了锁
 */
public void conditionSignale(){
    lock.lock();
    try {
        condition.signal();
    }finally {
        lock.unlock();
    }
}

猜你喜欢

转载自blog.csdn.net/waterflying2015/article/details/80977832