`
flypeace
  • 浏览: 158305 次
  • 性别: Icon_minigender_1
  • 来自: 湖北
社区版块
存档分类
最新评论

java.util.concurrent.locks.ReentrantLock 锁经验

    博客分类:
  • java
阅读更多

 

     1、ReentrantLock 锁是采用计数机制来进行加锁的,getHoldCount() 方法,可以认为当前线程Hold的次数,在实际当前线程中,lock/tryLock 和 unlock 不匹配,可能出现锁无法释放的情况。

 

      2、如果 先tryLock   ,然后再 lock 一次,则holdCount 为2,如果在finally中 unlock 一次,holdCount只 减1,也不能释放锁。缩放锁的前提是:如果hold 数为 0 ,则释放锁。所以 tryLock   之后,如果成果获取锁,也就马上会锁住,无需再进行一次 lock 操作,其他线程获取不到锁,是无缝的。

 

      3、另外 unlock 操作,如果当前线程没有持有hold 就调用 unlock 方法,就会抛出 IllegalMonitorStateException 异常.

 

 

分享到:
评论

相关推荐

    深入Synchronized和java.util.concurrent.locks.Lock的区别详解

    而Lock接口,它是Java并发包(java.util.concurrent.locks)的一部分,提供了比synchronized更高级和灵活的锁操作。Lock接口的实现类,如ReentrantLock,提供了尝试获取锁、可中断的锁等待、定时锁等待等功能。使用...

    28个java常用的工具类

    23. **`java.util.concurrent.locks.Lock`** 和 **`java.util.concurrent.locks.ReentrantLock`**: 锁机制,用于线程同步。 24. **`java.util.ArrayList`**: 用于创建堆栈、队列和双端队列的实现,如`ArrayDeque`。...

    java ReentrantLock详解.docx

    `ReentrantLock`是Java并发编程中的一种高级锁机制,它是`java.util.concurrent.locks`包中的类,提供了比`synchronized`关键字更丰富的功能和更细粒度的控制。相较于`synchronized`,`ReentrantLock`的主要优势在于...

    工作在同一个java虚拟机中的线程能实现消息互发(alpha)

    3. **信号量(Semaphores)和锁**:`java.util.concurrent.locks`包提供了`Semaphore`和`ReentrantLock`等同步原语,可以用来控制并发访问资源的数量。 4. **条件变量(Condition)**:`java.util.concurrent.locks...

    java 资源搜索并下载(线程等待和通报)

    import java.util.concurrent.locks.ReentrantLock; public class ResourceDownloader { private final Lock lock = new ReentrantLock(); private final Condition condition = lock.newCondition(); public ...

    SimpleDateFormat线程不安全的5种解决方案.docx

    import java.util.concurrent.locks.ReentrantLock; public class SimpleDateFormatExample { private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("mm:ss"); private static Lock lock = ...

    J.U.C系列线程安全的理论讲解编程开发技术共6页.pdf

    3. **`java.util.concurrent.locks`包**:包含锁和条件变量的实现,如`ReentrantLock`、`ReadWriteLock`等,它们提供了比`synchronized`更灵活的锁机制。 4. **`java.util.concurrent.atomic`和`java.util....

    java多线程编程总结

    - `java.util.concurrent.locks`包提供了多种类型的锁,如`ReentrantLock`等。 ##### 4. 信号量 - `java.util.concurrent.Semaphore`用于控制对有限资源的访问。 ##### 5. 阻塞队列 - `java.util.concurrent....

    java的concurrent用法详解

    `java.util.concurrent.locks`包中提供了比`synchronized`关键字更强大、更灵活的锁实现——`ReentrantLock`。 **2.2.1 `ReentrantLock`特性** - 支持公平锁和非公平锁的选择。 - 提供尝试获取锁的能力,可以指定...

    Java多线程 - (一) 最简单的线程安全问题

    3. **Lock接口**:Java提供`java.util.concurrent.locks.Lock`接口,提供了比`synchronized`更细粒度的锁控制,如可重入锁、公平锁等。例如,`ReentrantLock`。 ```java import java.util.concurrent.locks.Lock; ...

    简单聊聊Synchronized和ReentrantLock锁.docx

    相比之下,ReentrantLock(可重入锁)是Java并发包java.util.concurrent.locks中的一个类,提供了更细粒度的锁控制。ReentrantLock允许显式获取和释放锁,并且支持更丰富的锁原语,如公平锁、非公平锁、可中断锁、...

    java多线程实现生产者和消费者

    import java.util.concurrent.locks.ReentrantLock; public class Buffer { private final Lock lock = new ReentrantLock(); private final Condition notEmpty = lock.newCondition(); private final ...

    concurrent-1.3.4-sources.jar

    4. **java.util.concurrent.locks** 包:这个包提供了高级锁机制,包括ReentrantLock、ReadWriteLock等。ReentrantLock可重入锁比内置的synchronized更灵活,提供了公平性和非公平性选择,以及尝试锁定、定时锁定...

    java中的锁

    内置锁是通过synchronized关键字实现的,而显式锁则是通过java.util.concurrent.locks包中的Lock接口及其实现类来提供的。 一、内置锁(synchronized) 1. 同步方法:在方法声明前加上synchronized关键字,整个...

    java5 thread

    Java5新增了三个多线程相关的包,分别是`java.util.concurrent`、`java.util.concurrent.atomic`和`java.util.concurrent.locks`。这些包提供了大量高级的并发控制工具和数据结构,使得开发者可以更加高效和安全地...

    JAVA Concurrent Programming

    4. `java.util.concurrent.locks`包 此包包含各种锁实现,如`ReentrantLock`(可重入锁)、`ReadWriteLock`(读写锁)和`Condition`(条件变量)。这些锁机制提供了更灵活的同步控制,比如读写锁允许多个读线程同时...

    Java concurrency之互斥锁_动力节点Java学院整理

    Java中的`ReentrantLock`类是互斥锁的一种实现,它是Java并发包(`java.util.concurrent.locks`)的一部分。 `ReentrantLock`提供了比Java内置的`synchronized`关键字更丰富的功能和更高的控制级别。它具有可重入性,...

    Java5.0多线程编程实践.pdf

    Java 5.0中`java.util.concurrent.locks`包提供了`ReentrantLock`类,它是一种可重入的互斥锁。与`synchronized`关键字相比,`ReentrantLock`提供了更多的功能,包括尝试非阻塞地获取锁、可中断地获取锁以及超时获取...

    Java concurrency之互斥锁_动力节点Java学院

    本文将深入探讨Java中的`ReentrantLock`,它是Java并发包`java.util.concurrent.locks`中的一个核心类,提供了比`synchronized`更细粒度的锁控制。 `ReentrantLock`是一个可重入的互斥锁,这意味着一个线程可以多次...

    javathread.part05.rar

    Java提供了`java.lang.Thread.dumpStack()`帮助诊断死锁,而`java.util.concurrent.locks`包中的`ReentrantLock`和`Condition`可以更精细地控制锁和条件,降低死锁的风险。 此外,`java.util.concurrent`包中的`...

Global site tag (gtag.js) - Google Analytics