`
bo_hai
  • 浏览: 565829 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

ReadWriteLock 使用实例

 
阅读更多

首先来讨论ReadWriteLock 类的使用场景,记住一句话:在多线程,“读多写少”的场景就推荐使用,可以提高线程的性能。下面是一个实例:

import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class WriteReadMap<K, V> {
	private final Map<K,V> map;
	private final ReadWriteLock lock = new ReentrantReadWriteLock();
	private final Lock r = lock.readLock();
	private final Lock w = lock.writeLock();
	
	public WriteReadMap(Map<K, V> map) {
		this.map = map;
	}
	
	public V put(K key,V value) {
		w.lock();
		try {
			return  map.put(key, value);
		} finally {
			w.unlock();
		}
	}
	
	public V get(Object key) {
		r.lock();
		try {
			return map.get(key);
		} finally {
			r.unlock();
		}
	}
}

 

分享到:
评论
1 楼 bo_hai 2014-09-04  
获取锁的操作lock()最好放在try块中。

相关推荐

    Java语言ReadWriteLock特性实例测试

    以下是一个简单的ReadWriteLock实例测试代码: ```java package com.alioo.lock; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.locks.Lock; import java.util....

    23 按需上锁—ReadWriteLock详解.pdf

    使用ReadWriteLock与使用Lock接口的基本流程相似,需要分别获取读锁和写锁。以下是一个简单的例子: ```java public class Client { public static void main(String[] args) throws InterruptedException { ...

    Java多线程编程之读写锁ReadWriteLock用法实例

    Java的多线程编程中,读写锁(ReadWriteLock)是一种高效的并发控制机制,它将锁的权限进行了区分,允许多个线程同时读取资源,但仅允许一个线程进行写入操作。这种设计模式提高了数据共享的效率,因为读操作通常...

    Java多线程之readwritelock读写分离的实现代码

    以下是一个使用ReadWriteLock实现读写分离的例子: ```java package com.bird.concursey.charpet3; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock...

    readwritelock.zip

    在这个例子中,`read()`方法获取读锁,`write()`方法获取写锁。在读锁和写锁的`finally`块中,我们释放了相应的锁,确保即使在异常情况下也能正确释放锁。 ### 6. 优化与注意事项 - **公平性**:`...

    java中Locks的使用详解

    下面是一个使用 ReentrantLock 的例子: ```java public void perform() { lock.lock(); try { counter++; } finally { lock.unlock(); } } ``` 下面是一个使用 tryLock() 的例子: ```java public void ...

    panda-demo.zip

    在“panda-demo”项目中,作者可能创建了两个版本的代码,一个使用synchronized,另一个使用ReadWriteLock。然后通过性能测试(如JMH),对比它们在处理大量并发读写操作时的性能差异。通常,如果读操作远多于写操作...

    backport-util-concurrent_java_backport_

    backport-util-concurrent包含ReentrantLock,它是可重入的互斥锁,以及读写锁ReadWriteLock。 7. **ThreadLocalRandom**:虽然这个特性在Java 7中引入,但backport库可能也包括了对它的支持,允许线程本地随机数...

    多线程安全退出实例源代码

    3. **共享资源的同步**:使用`synchronized`关键字或`java.util.concurrent`包中的工具(如`Semaphore`, `Lock`, `ReadWriteLock`等)来保护共享资源,防止竞态条件和死锁。在退出前,确保所有锁已被释放。 4. **...

    多线程实例

    本实例主要探讨了内部锁(synchronized)、重入锁(ReentrantLock)、读写锁(ReadWriteLock)、Condition以及信号量(Semaphore)等与线程同步相关的概念及其原理。以下是对这些知识点的详细讲解: 1. 内部锁...

    javaSE代码实例

    17.3.3 ReadWriteLock接口与ReentrantReadWriteLock类简介 390 17.3.4 ReentrantReadWriteLock读/写锁的具体使用 391 17.4 信号量的使用 393 17.4.1 Semaphore类简介 393 17.4.2 Semaphore类的具体使用 ...

    java多线程、锁的教程跟案例

    - 继承Thread类:自定义类继承Thread类,并重写其run()方法,然后创建该类实例并调用start()启动。 - 实现Runnable接口:创建一个实现Runnable接口的类,重写run()方法,然后将其实例传递给Thread类的构造器创建...

    Java锁的知识总结及实例代码共7页.pdf.zip

    - **ReadWriteLock**:读写锁,允许多个读取线程同时访问,但写入操作是独占的,提高了并发性能。 - **Condition**:与Lock关联,可以创建多个条件变量,每个条件变量管理一组线程,可以更精确地控制线程的等待和...

    java 多线程实例

    - `Lock`接口及实现:提供比`synchronized`更细粒度的锁控制,如`ReentrantLock`、`ReadWriteLock`等。 - `Atomic`类:提供原子性操作,如`AtomicInteger`、`AtomicLong`等,适用于简单计数操作。 4. **线程通信*...

    java线程程序实例

    在Java中,我们可以使用try-with-resources语句,配合公平锁(如ReentrantLock的公平模式)来减少死锁的风险。 锁机制是Java并发编程中用来协调多线程访问共享资源的重要工具。主要有以下几种类型: 1. **...

    关于CoreJava同步的疑惑例子

    在这个“关于CoreJava同步的疑惑例子”中,我们将探讨Java中的同步机制,以及如何通过示例代码`Bank.java`, `TransferRunnable.java`, 和 `SynchBankTest.java`来理解这个概念。 1. **同步的必要性** 当多个线程...

    java多线程设计模式源码

    6. **读写锁(ReadWriteLock)**:`ReadWriteLock`是Java并发库中的`java.util.concurrent.locks.ReadWriteLock`接口,它提供了一种机制,允许多个读取者同时访问资源,但在写入时独占资源,从而提高了并发性能。...

    Java中的锁分类与使用.docx

    - **共享锁**允许多个线程同时持有,Java的ReadWriteLock的读锁就是一个例子。读锁可以被多个线程共享,但写锁是独占的,即写锁存在时,读锁和写锁都无法被其他线程获取。 3. **互斥锁/读写锁** - **互斥锁**(如...

    Synchronized 和 Lock 的区别和使用场景

    3. 锁住整个对象:当`synchronized`后面跟的是`this`或者类实例时,锁住的是整个对象,不允许其他线程同时访问对象的所有`synchronized`方法和代码块。 二、Lock接口 Lock接口提供了更灵活的锁控制,比`...

Global site tag (gtag.js) - Google Analytics