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();
    }
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值