读写锁ReadWriteLock的基本使用,创建一个缓冲池。

创建一个读写锁

ReadWriteLock rw = new ReentrantReadWriteLock();



代码:

package Exce;


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


public class ThreadCacheTest {


/**读写锁的应用
* @param args
*/
private Map<String, Object> map = new HashMap<String, Object> ();
public static void main(String[] args) {
for(int i=1;i<=3;i++){
new Thread(new Runnable(){

@Override
public void run() {

System.out.println(Thread.currentThread().getName()+"取到数据--"+new ThreadCacheTest().getData("aa"));
}

}).start();


 try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}
}
public Object getData(String key){
ReadWriteLock rw1 = new ReentrantReadWriteLock();
//上一个读锁
rw1.readLock().lock();
Object value = null;
try{
   value = map.get(key);
 //要上写锁,先释放读锁
rw1.readLock().unlock();
rw1.writeLock().lock();
try{
if(value == null){

value = "abc";
}
}finally{
rw1.writeLock().unlock();
}
rw1.readLock().lock();
}finally{ 
rw1.readLock().unlock();
}

return value;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
在Java中,可以使用以下几种方式创建悲观锁: 1. 使用synchronized关键字:synchronized关键字是Java中内置的实现悲观锁的机制之一。通过在方法或代码块前添加synchronized关键字,可以使得多个线程在执行该方法或代码块时串行化。 ```java public synchronized void synchronizedMethod() { // 同步的方法体 } ``` ```java public void synchronizedBlock() { synchronized (this) { // 同步的代码块 } } ``` 2. 使用ReentrantLock类:ReentrantLock是Java提供的一种可重入锁机制,它实现了Lock接口,可以实现更加灵活的悲观锁控制。使用ReentrantLock可以通过lock()方法获取锁并在使用完后调用unlock()方法释放锁。 ```java private Lock lock = new ReentrantLock(); public void lockMethod() { lock.lock(); try { // 锁定的代码块 } finally { lock.unlock(); } } ``` 3. 使用ReadWriteLock类:ReadWriteLock是Java提供的一种读写锁机制,它允许多个线程同时读取共享资源,但只允许一个线程进行写操作。使用ReadWriteLock可以实现更高效的并发读取操作。 ```java private ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); public void readMethod() { readWriteLock.readLock().lock(); try { // 读取共享资源的代码块 } finally { readWriteLock.readLock().unlock(); } } public void writeMethod() { readWriteLock.writeLock().lock(); try { // 写操作的代码块 } finally { readWriteLock.writeLock().unlock(); } } ``` 这些是Java中实现悲观锁的常见方式,具体的选择可以根据项目需求和线程安全性要求来决定。需要注意的是,在使用悲观锁时,要注意处理好锁的获取和释放,避免死锁和资源竞争的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值