锁ReentrantLock

        ReentrantLock也是一个可重入锁,定位与synchronized类似.

用法:

        ReentrantLock的加锁与解锁是两个方法,lock与unlock,在使用lock加锁后需要使用unlock来解锁,推荐配合try finally使用,这样就算中间抛出异常导致线程终止,finally中的unlock也能保证正确解锁.

        ReentrantLock与synchronized不同的是,提供了一个带超时时间的lock方法,trylock(超时时间)
如果获取不到锁,那么等待一段时间后放弃加锁.

        ReentrantLock可以被设置为公平锁,在构造方法中传入true,就可以创建一个公平锁.

        ReentrantLock搭配Condition类实现等待-唤醒,可以更精确控制唤醒某个指定的线程.
 

public static void main(String[] args) throws InterruptedException {
        ReentrantLock lock = new ReentrantLock();
        lock.lock();
        try{

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            lock.unlock();
        }
        //创建公平锁
        ReentrantLock lock2 = new ReentrantLock(true);
        lock2.tryLock(5, TimeUnit.SECONDS);
        try{

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            lock2.unlock();
        }
    }

ReentrantLock和synchronized的区别:

        1.synchronized是一个关键字,是由JVM实现的,ReentrantLock是一个标准库的类,是JVM外实现的.

        2.synchronized使用时不需要手动解锁,ReentrantLock使用时需要解锁

        3.synchronized在获取锁失败时,会死等,而ReentrantLock可以使用trylock来超时后放弃加锁

        4.synchronized是不公平锁,而ReentrantLock可以被设置为公平锁

        5.synchronized使用wait notify来进行等待唤醒,ReentrantLock搭配Condition类实现等待-唤醒,可以更精确控制唤醒某个指定的线程.

        

        

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值