Java并发笔记 (8)---- Lock

锁是用来控制多个线程访问共享资源的方式。

Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而Java SE 5之后,并发包中新增
Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功
能。

区别

  • 缺少了(synchronized)隐式获取释放锁的便捷性。
  • 拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized关键字所不具备的同步特性(见下表)。
特性描述
尝试非阻塞获取锁当前线程尝试获取锁,如果这一时刻锁没有被其他线程获取,则成功获取并持有锁
能被中断的获取锁获取锁的进程能响应中断,当获取到锁的进程被中断,中断异常会被抛出,同步锁释放
超时获取锁在指定时间内获取锁,如果截止时间到了仍然没有获取锁。返回!

代码

Lock lock = new ReentrantLock();
    lock.lock();
    try {
        //,,,,
    } finally {
    lock.unlock();
}

finally块中释放锁,目的是保证在获取到锁之后,最终能够被释放。

LockAPI

// 获取锁
void lock();

// 可中断的获取锁,当前线程被中断时,无法获取同步锁!可以响应中断
void lockInterruptibly() throws InterruptedException;

// 尝试非阻塞的获取锁,获得时立即返回
boolean tryLock();

/*
	超时获取锁,满足下面三种情况返回:
	1.当前线程在限定时间内获取锁
	2.当前线程在规定时间内被中断
	3.超时,return false;
*/
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;

// 释放锁
void unlock();

// 获取等待通知组件,调用wait方法以后,会释放同步锁。
// 底层为一个等待队列!后面会进行描述
Condition newCondition();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值