多线程环境中lock.trylock方法争抢锁

在多线程或分布式环境中,经常需要用到锁,trylock有两种用法,一种是不带参数:不设置等待时间,获取失败立即返回false。另一种是带等待时间的,线程会先挂起等待设置的时间结束如果还未获取到锁则返回false。

下面来看一个多线程争抢锁的实例:

public void execWithLock(Lock lock, Supplier<Boolean> supplier) {
        //Lock lock = new ReentrantLock(); //obtainLock(lockKey);
        try {
            String currThread = Thread.currentThread().getName();
            if (lock.tryLock(4L, TimeUnit.SECONDS)) {
                try {
                    System.out.println(currThread + "获取到锁了,开始执行方法");
                    Boolean result = supplier.get();
                    System.out.println(currThread + "函数执行结果:" + result);
                    Thread.sleep(3000L);
                    System.out.println(currThread + "方法执行结束");
                } finally {
                    System.out.println(currThread + "解锁");
                    lock.unlock();
                }
            } else {
                System.out.println(currThread + "没获取到锁");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        RedisLockServiceImpl test = new RedisLockServiceImpl();
        Lock lock = new ReentrantLock();

        (new Thread() {

            @Override
            public void run() {
                test.execWithLock(lock, () -> {
                    System.out.println("111This is function details...");
                    System.out.println("111......");
                    System.out.println("111Function is over.");
                    return true;
                });
            }
        }).start();

        (new Thread() {

            @Override
            public void run() {
                test.execWithLock(lock, () -> {
                    System.out.println("222This is function details...");
                    System.out.println("222......");
                    System.out.println("222Function is over.");
                    return true;
                });
            }
        }).start();

    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值