`

Java中的显示锁ReentrantLock使用时机

    博客分类:
  • java
阅读更多

从Java 5.0开始,Java提供了访问共享对象的新机制:ReentrantLock。它实现了Lock接口:

    public interface Lock {

         void lock();

         void lockInterruptibly() throws InterrupttedException;

    boolean tryLock();

     boolean tryLock(long timeout, TimeUnitunit) throws InterruptedException;

     void unlock();

     Condition newCondition();

    }

    ReentrantLock提供了与synchronized相同的互斥和内存可见性的保证。获得ReentrantLock的锁与进入synchronized块有着相同的内存语义,释放ReentrantLock锁与退出synchronized块有相同的内存语义。

    那么为什么要创建与内存锁如此相似的机制呢?内存锁在大部分情况下能够很好的工作,但是有些功能上存在着局限:

     1)不能中断那些正在等待获取锁的进程,并且在请求锁失败的情况下,必须无限等待;

     2)内部锁必须在获取它们的代码块中被释放;这很好的简化了代码,但是在某些情况下,一个更灵活的加锁机制提供了更好的活跃度和性能。

     使用ReentrantLock的一般形式为:

     Lock lock = new ReentrantLock();

     ........

     lock.lock();

     try {

          //更新对象的状态

         //捕获异常,必要时恢复到原来的不变约束

    } finally {

            lock.unlock();        //锁必须在finally块中释放

    }

    《Java并发编程实践》一书给出了使用ReentrantLock的最佳时机:

      当你需要以下高级特性时,才应该使用:可定时的、可轮询的与可中断的锁获取操作,公平队列,或者非块结构的锁。否则,请使用synchronized。           

http://aguang520.iteye.com/blog/755017

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java的lock和synchronized的区别.docx

    Java 中的 Lock 和 Synchronized 的区别 Java 语言中有很多相似关键字或相似意义的字,...lock 提供了更加灵活和高效的锁机制,可以满足不同场景下的需求,而 synchronized 则是 Java 中的关键字,具有语言的内置性。

    Java编程中“为了性能”尽量要做到的一些地方

    - 考虑使用更细粒度的锁,比如`ReentrantLock`等。 - 避免在循环体内部使用`synchronized`,因为这会降低程序的响应能力和吞吐量。 #### 8. 尽量使用StringBuilder和StringBuffer进行字符串连接 在拼接字符串时,...

    JAVA面试题资料汇总及答案整理.pdf

    Java是一种广泛使用的面向对象的编程语言,其设计目标包括简洁性、可移植性和安全性。以下是一些关于Java面试题的详细知识点: 1. 异常处理机制:Java的异常处理机制是通过`try-catch-finally`语句块实现的。当程序...

    JAVA 面试入坟系列(思维导图) By_萧曵丶.pdf

    - **类的初始化时机**:Java虚拟机在首次主动使用类时进行初始化。 ### 3. Java面试相关 #### 3.1 常见面试题 - **变量自增运算**:考察对Java中变量自增运算的理解,如`i++`与`++i`的区别,以及执行顺序和结果。...

    java 多线程交互简单范例

    在Java编程语言中,多线程是并发执行多个任务的核心机制。这个压缩包中的文件提供了几个关于Java多线程交互的实例,可以帮助我们深入理解如何在并发环境中控制线程的同步,确保数据的一致性和安全性。 首先,让我们...

    JAVA核心知识点整理.pdf

    在Java中,可以通过关键字synchronized和java.util.concurrent包中的工具类如ReentrantLock来实现线程同步。Java的多线程并发模型基于线程和锁的机制,以及引入了volatile关键字、CAS操作(Compare-And-Swap)、原子...

    java并发编程综合讲解

    可以通过合理使用锁(如ReentrantLock)来提升性能。 - **Lock接口**:提供了比synchronized更灵活的锁机制,如公平锁、非公平锁、读写锁等,可以控制锁的获取和释放时机,以优化并发性能。 - **volatile关键字**...

    国内几个公司的Java面试试题

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能、丰富的类库和高效能而闻名。在Java面试中,面试官通常会考察应聘者的基础知识、编程能力、问题解决技巧以及对Java特性的理解。以下是一些可能在Java...

    大厂java面试题库集锦

    Java提供了多种线程同步机制,包括synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock接口和相关的类如ReentrantLock。synchronized确保同一时刻只有一个线程访问特定代码块。wait()、notify()和...

    最全Java面试大全.pdf

    Java面试大全涵盖了许多核心知识点,...这些是Java面试中常见的问题,理解并掌握这些知识点对于Java开发者来说至关重要。在面试时,除了理论知识,还要关注实际应用和问题解决能力,这样才能全面展示自己的专业水平。

    最新大厂Java面试题(上).pdf

    Spring框架是Java编程中广泛使用的一个框架,它主要通过依赖注入(DI)和面向切面编程(AOP)来简化Java开发。 #### Spring框架中用到的设计模式 Spring框架使用了多种设计模式,包括工厂模式、单例模式、代理模式...

    java面试题库(含答案)

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而备受开发者喜爱。在面试过程中,Java相关的知识通常涵盖了语法基础、面向对象编程、数据结构与算法、多线程、JVM内存模型、集合框架、...

    同步写日志代码

    因此,`OptLog.java`可能包含了优化的日志同步策略,比如使用`ReentrantLock`,这是一种更细粒度的锁,允许更高的并发性: ```java import java.util.concurrent.locks.ReentrantLock; public class OptLog { ...

    Java面试题和答案(英文版).doc

    2. **时机**:在Java中,一个对象如果变得不可达(即没有任何引用指向它),那么它就会成为垃圾收集的目标。Java虚拟机(JVM)会在适当的时候执行垃圾回收操作,清理这些无用的对象。 #### 三、多线程中的同步 1. ...

    Java程序性能优化之二十三个建议

    10. **使用适当的同步机制**:避免使用synchronized关键字的全局锁,可以考虑使用ReentrantLock、ConcurrentHashMap等并发容器,以减少锁竞争。 11. **使用流式API (Stream API)**:Java 8引入的流API可以简化处理...

    JAVA笔试题集JAVA笔试题集.doc

    4. 线程同步:Java提供了多种线程同步机制,如synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock接口(如ReentrantLock)等。这些方法用于协调多线程对共享资源的访问,防止数据不一致。 5. 析构...

    java学习笔记-基础

    此外,Java提供了丰富的并发工具,如`ExecutorService`、`Semaphore`、`ReentrantLock`等,用于协调和控制线程间的交互。 #### 结论 Java作为一门强大的编程语言,其基础知识涵盖了从环境配置、语言特性、数据类型...

    1000道包含JAVA所有知识点面试的宝典

    ### Java基础知识点详解 #### 1. 多个类在一个.java文件中 - **规则**:在一个`.java`源文件中可以定义多个类,但只能有一个公共类,并且该文件名必须与公共... - 使用`ReentrantLock`等锁。 #### 51. 启动线程 -...

Global site tag (gtag.js) - Google Analytics