前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java中ReentrantLock类的tryLock和tryLock的例子和用法

java中ReentrantLock类的tryLock和tryLock的例子和用法

作者头像
马克java社区
修改2021-04-23 10:48:12
1.3K0
修改2021-04-23 10:48:12
举报
文章被收录于专栏:java大数据

ReentrantLock类的tryLock和tryLock(时间) 

马 克-to-win:tryLock的方法就是试一下,如果能得到锁,就返回真,如果当时得不到,马上就返回假,绝不等。tryLock(时间)的用法就是 在规定的时间内设法得到锁。如果在规定的时间内最终不能得到锁,就返回假。注意,这个方法是可以被打断的,打断后的处理方法和上面的例子 lockInterruptibly的处理一样。

例1.9.8_a:

import java.util.concurrent.TimeUnit;

import java.util.concurrent.locks.ReentrantLock;

class A {

    private ReentrantLock lock = new ReentrantLock();

    int ticketNum = 10;

    public void buyOne() {

        System.out.println("just before lock.lockInterruptibly();");

        boolean succeed = lock.tryLock();

        if (succeed) {

            System.out.println(Thread.currentThread().getName()

                    + "ticketNum is" + ticketNum);

            if (ticketNum > 0) {

                try {

                    Thread.sleep(5000);

                } catch (InterruptedException e) {

                    e.printStackTrace();

                }

                ticketNum--;

                System.out

                        .println("模仿select * from table for update,执行的很慢,买了一张"

                                + Thread.currentThread().getName()

                                + "ticketNum is" + ticketNum);

            }

            lock.unlock();

        }else{

            System.out.println("没获得锁,一张");

        }

    }

    public void buyBatch(int num) throws InterruptedException {

        System.out.println("just before lock.lockInterruptibly();");

        boolean succeed = false;

        boolean sleepSucceed = false;

        succeed = lock.tryLock(2, TimeUnit.SECONDS);

        if (succeed) {

            System.out.println("Thread.currentThread().getName()+ticketNum is"

                    + ticketNum);

            try {

                Thread.sleep(5000);

                sleepSucceed=true;

            } catch (InterruptedException e) {

                System.out.println("已经获得了锁了,几张的睡觉被打断,表示预备工作没做好,什么也不买");

            }      

更多请见:https://blog.csdn.net/qq_43650923/article/details/101161930

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档