当前位置: 首页 > 面试题库 >

如何使用ReentrantLock锁定?

秦弘亮
2023-03-14
问题内容

我希望以下测试仅打印“已被锁定”一次。但是它因此会打印行。

public class LocKTest {
    @Test
    public void testLock() {
        Lock lock = new ReentrantLock();
        while (true) {
            if (lock.tryLock()) {
                //lock.lock(); same result if I include an explicit lock here
                System.out.println("has been locked");
            }
        }
    }
}

据我了解,tryLock将在ReentrantLock可能的情况下将其锁定(即,如果尚未锁定)。但是显然不是这样。

如何设置这样的锁线程安全?


问题答案:

名称为ReentrantLock,表示re-enter您已经拥有锁了。

如果希望使用线程块,则可以使用例如Semaphore具有1(或更多)许可的a。



 类似资料:
  • 本文向大家介绍详解Java中的ReentrantLock锁,包括了详解Java中的ReentrantLock锁的使用技巧和注意事项,需要的朋友参考一下 ReentrantLock锁 ReentrantLock是Java中常用的锁,属于乐观锁类型,多线程并发情况下。能保证共享数据安全性,线程间有序性 ReentrantLock通过原子操作和阻塞实现锁原理,一般使用lock获取锁,unlock释放锁,

  • 主要内容:1 ReentrantLock的概述,1.1 ReentrantLock的API方法,1.2 可重入,1.3 公平与非公平,2 ReentrantLock的原理,2.1 基本结构,2.2 构造器,2.3 非公平模式加锁原理,2.4 公平模式加锁原理,2.5 解锁原理,3 ReentrantLock总结Java的ReentrantLock的源码实现,包括加锁、解锁的源码,以及公平性、重入性的实现! 1 ReentrantLock的概述 public class ReentrantLock

  • 本文向大家介绍ReentrantLock源码详解--公平锁、非公平锁,包括了ReentrantLock源码详解--公平锁、非公平锁的使用技巧和注意事项,需要的朋友参考一下 问题 (1)重入锁是什么? (2)ReentrantLock如何实现重入锁? (3)ReentrantLock为什么默认是非公平模式? (4)ReentrantLock除了可重入还有哪些特性? 简介 Reentrant = Re

  • 我试图让多个消费者线程侦听一个生产者线程,直到生产者有东西要发布。我认为可以工作的代码在放入和取出共享类时“丢失”了锁。 在控制器类中,我启动运行Server server=new Server()的线程; consumer类将线程的详细信息放入映射中,如下所示: 共享类仅为: 服务器有以下run()方法: 输出如下: 从服务器类的输出int中,我可以看到,当我从映射中读取锁时,它现在的状态为“U

  • 本文向大家介绍详解java并发之重入锁-ReentrantLock,包括了详解java并发之重入锁-ReentrantLock的使用技巧和注意事项,需要的朋友参考一下 前言 目前主流的锁有两种,一种是synchronized,另一种就是ReentrantLock,JDK优化到现在目前为止synchronized的性能已经和重入锁不分伯仲了,但是重入锁的功能和灵活性要比这个关键字多的多,所以重入锁是

  • 本文向大家介绍Java源码解析之可重入锁ReentrantLock,包括了Java源码解析之可重入锁ReentrantLock的使用技巧和注意事项,需要的朋友参考一下 本文基于jdk1.8进行分析。 ReentrantLock是一个可重入锁,在ConcurrentHashMap中使用了ReentrantLock。 首先看一下源码中对ReentrantLock的介绍。如下图。ReentrantLoc