`

JDK5新增的锁机制

    博客分类:
  • java
 
阅读更多

JDK5开始新增了两种锁机制:ReentrantReadWriteLock和ReentrantLock。

 

对于ReentrantReadWriteLock锁机制:

     1、重入方面其内部的WriteLock可以获取ReadLock,但是反过来ReadLock想要获得WriteLock则永远都不要想。

 

     2、WriteLock可以降级为ReadLock,顺序是:先获得WriteLock再获得ReadLock,然后释放WriteLock,这时候线程将保持Readlock的持有。反过来ReadLock想要升级为WriteLock则不可能。

 

     3、ReadLock可以被多个线程持有并且在作用时排斥任何的WriteLock,而WriteLock则是完全的互斥。这一特性最为重要,因为对于高读取频率而相对较低写入的数据结构,使用此类锁同步机制则可以提高并发量。

 

     4、不管是ReadLock还是WriteLock都支持Interrupt,语义与ReentrantLock一致。

 

     5、WriteLock支持Condition并且与ReentrantLock语义一致,而ReadLock则不能使用Condition,否则抛出UnsupportedOperationException异常。

class CachedData {
	Object data;
	volatile boolean cacheValid;
	ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();

	void processCachedData() {
		rwl.readLock().lock();
		if (!cacheValid) {
			// Must release read lock before acquiring write lock
			rwl.readLock().unlock();
			rwl.writeLock().lock();

			// Recheck state because another thread might have acquired
			// write lock and changed state before we did.
			if (!cacheValid) {
				data = ...
				cacheValid = true;
			}

			// Downgrade by acquiring read lock before releasing write lock
			rwl.readLock().lock();
			rwl.writeLock().unlock(); // Unlock write, still hold read
		}

		use(data);
		rwl.readLock().unlock();
	}
}

 

分享到:
评论

相关推荐

    jdk1.9百度网盘下载地址

    JDK 1.9增加了对多重释放对象的检测机制,这有助于提高应用程序的安全性。当对象被多次释放时,可能会导致内存泄漏或其他问题,这一特性可以有效避免此类情况的发生。 #### 3. 堆外内存管理 为了更好地支持大数据...

    如何配置JDK与tomcat

    本文详细介绍了如何配置JDK与Tomcat的过程,以及相关的知识点,包括数据库连接方式、实体-DAO模式、事务处理和锁机制等。这些知识对于Java开发者来说是非常重要的,有助于更好地理解和掌握Web应用开发的核心技术。

    Java jdk1.7学习笔记pdf

    - **锁与同步机制**:深入分析不同类型的锁及其使用场景,如重入锁(ReentrantLock)、读写锁(ReadWriteLock)等。 ##### 3.3 虚拟机调优 - **JVM参数调整**:探讨如何通过调整JVM参数来优化程序性能,例如设置...

    java jdk 学习笔记

    Java提供了一套丰富的多线程编程接口,如Runnable接口、Thread类、同步机制、锁以及并发工具类。这些内容对于编写支持高并发的Java应用程序非常重要。 8. 输入输出(I/O) Java的I/O库允许程序读写数据,包括流式I/...

    java JDK1.5实例宝典

    新增了并发工具类,如Semaphore(信号量)、CyclicBarrier(循环栅栏)和CountDownLatch(计数门锁),这些工具类提供了更高级的同步和协调机制,帮助开发者编写出高效且线程安全的代码。同时,Executor框架的引入...

    JDK8中新增的原子性操作类LongAdder详解

    LongAdder的工作机制是,当线程尝试更新变量时,如果失败了,不是自旋CAS重试,而是尝试获取其他原子变量的锁,最后获取当前值时候是把所有变量的值累加后返回的。这样可以减少争夺共享资源的并发量,提高性能。 ...

    IBM JDK Dialog

    3. Memory management:内存管理是JVM的核心组成部分,涉及对象分配、可达对象、垃圾回收、堆大小问题、堆锁分配和缓存分配等。文档详细描述了内存管理的工作机制,特别是垃圾回收(Garbage Collection),包括它的...

    jdk 1.6 英文api chm

    JDK 1.6在性能、安全性和功能方面进行了大量的改进,包括但不限于新的编译器技术、增强的垃圾回收机制、新的并发工具库以及对图形用户界面的支持等。 ### CHM格式的API文档 #### 1. **CHM格式的特点** - **压缩**...

    Java并发编程原理与实战

    线程的状态以及各状态之间的转换详解.mp4 ...JDK8新增锁StampedLock详解.mp4 重排序问题.mp4 happens-before简单概述.mp4 锁的内存语义.mp4 volatile内存语义.mp4 final域的内存语义.mp4 实战:问题定位.mp4

    JDK1.8中ConcurrentHashMap中computeIfAbsent死循环bug.docx

    `computeIfAbsent`是JDK 1.8中新增的一个功能强大的方法,它的作用是在给定的键不存在于映射中时,通过提供的函数来计算该键对应的值,并将其插入到映射中。其基本语法如下: ```java V computeIfAbsent(K key, ...

    HashMap与ConcurrentHashMap面试要点.pdf

    ConcurrentHashMap在JDK7和JDK8中实现并发安全的机制有所不同。 **JDK7中的ConcurrentHashMap**通过分段锁(Segmentation)来实现。将数据分为一段一段地存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中...

    java并发编程

    第57节JDK8新增锁StampedLock详解00:29:37分钟 | 第58节重排序问题00:23:19分钟 | 第59节happens-before简单概述00:15:17分钟 | 第60节锁的内存语义00:13:54分钟 | 第61节volatile内存语义00:12:04分钟 | 第62...

    龙果 java并发编程原理实战

    第57节JDK8新增锁StampedLock详解00:29:37分钟 | 第58节重排序问题00:23:19分钟 | 第59节happens-before简单概述00:15:17分钟 | 第60节锁的内存语义00:13:54分钟 | 第61节volatile内存语义00:12:04分钟 | 第62...

    Java 并发编程原理与实战视频

    第57节JDK8新增锁StampedLock详解00:29:37分钟 | 第58节重排序问题00:23:19分钟 | 第59节happens-before简单概述00:15:17分钟 | 第60节锁的内存语义00:13:54分钟 | 第61节volatile内存语义00:12:04分钟 | 第62...

    龙果java并发编程完整视频

    第57节JDK8新增锁StampedLock详解00:29:37分钟 | 第58节重排序问题00:23:19分钟 | 第59节happens-before简单概述00:15:17分钟 | 第60节锁的内存语义00:13:54分钟 | 第61节volatile内存语义00:12:04分钟 | 第62...

    java_jdk1.8.0_111:java_jdk1.8.0_111源码(Java,非C)

    - 锁机制:分析synchronized关键字和Lock接口的实现,理解并发控制的原理。 - 并发工具类:如ConcurrentHashMap、CountDownLatch、Semaphore等,源码揭示了它们在并发环境下的高效运作方式。 - Fork/Join框架:...

    黑马面试题总结

    以上总结了IT面试中常见的知识点,涵盖了进程与线程状态、输入输出流、集合框架、Java内存模型、多态、JDK 1.5新特性、设计模式、Java中的锁机制、JVM基础知识以及异常处理等多个方面。通过掌握这些核心概念和技术,...

Global site tag (gtag.js) - Google Analytics