Lock锁的使用方法(一)

public class LockTest01 {

    private Lock lock = new ReentrantLock();

    public static void main(String[] args) throws InterruptedException {
        /**
         * Lock锁 获取锁和释放锁 需要开发人员自己定义
         */
        LockTest01 lockTest01 = new LockTest01();
        lockTest01.print();
        Thread.sleep(500);
        lockTest01.print2();


    }

    public void print() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "开始获取Lock锁");
                //获取锁
                lock.lock();
                System.out.println(Thread.currentThread().getName() + "获取Lock锁成功");
            }
        },"r1").start();
    }

    public void print2() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "开始获取Lock锁");
                //获取锁
                lock.lock();
                System.out.println(Thread.currentThread().getName() + "获取Lock锁成功");
            }
        },"r2").start();
    }
}

此代码思路是当print()方法获取Lock锁时,print2()方法能否获取到Lock锁.
在这里插入图片描述
通过控制台可以发现,当print()方法获取到Lock锁的时候,print2()方法是无法获取到Lock锁的.

那么,我们如何才能让print2()获取到锁呢?下面上代码…
public class LockTest02 {
private Lock lock = new ReentrantLock();

public static void main(String[] args) throws InterruptedException {
    /**
     * Lock锁 获取锁和释放锁 需要开发人员自己定义
     */
    LockTest02 lockTest02 = new LockTest02();
    lockTest02.print();
    Thread.sleep(500);
    lockTest02.print2();


}

public void print() {
    new Thread(new Runnable() {
        @Override
        public void run() {
           try {
               System.out.println(Thread.currentThread().getName() + "开始获取Lock锁");
               //获取锁
               lock.lock();
               System.out.println(Thread.currentThread().getName() + "获取Lock锁成功");
           }catch (Exception e){
               e.printStackTrace();
           }finally {
               lock.unlock();
           }
        }
    },"r1").start();
}

public void print2() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName() + "开始获取Lock锁");
            //获取锁
            lock.lock();
            System.out.println(Thread.currentThread().getName() + "获取Lock锁成功");
        }
    },"r2").start();
}

}

此处代码与先前代码唯一不同的地方是在print()方法中调用了unLock()方法,他的意思的就是释放Lock锁,也就是说当print()方法释放了Lock锁之后,print2()方法才能获取到Lock锁,由此也可以发现,Lock锁是需要我们开发人员去手动获取和释放的!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小郑要做干饭人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值