博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?...
阅读量:5824 次
发布时间:2019-06-18

本文共 2328 字,大约阅读时间需要 7 分钟。

Lock读写锁机制可以实现! 

在Java中Lock接口比synchronized块的优势是什么?

 Lock接口最大的优势是为读和写分别提供了锁。

 

1 import java.text.SimpleDateFormat; 2 import java.util.Date; 3 import java.util.Random; 4 import java.util.concurrent.locks.ReadWriteLock; 5 import java.util.concurrent.locks.ReentrantReadWriteLock; 6  7  8  9 10 public class JoinTest2 {    11   12     public static void main(String[] args) {  13         final TheData theData = new TheData();14         for(int i=0;i<4;i++){15             new Thread(new Runnable() {16                 @Override17                 public void run() {18                     theData.get();19                 }20             }).start();21         }22         for(int i=0;i<4;i++){23             new Thread(new Runnable() {24                 @Override25                 public void run() {26                     theData.put(new Random().nextInt(1000));27                 }28             }).start();29         }        30     }  31     32 33 } 34 35 class  TheData{36     private Integer data = 0;37     private ReadWriteLock rwLock = new ReentrantReadWriteLock();38     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");39     public void get(){40         rwLock.readLock().lock();//读锁开启,读进程均可进入41         try{
//用try finally来防止因异常而造成的死锁42 System.out.println(Thread.currentThread().getName()+"read lock is ready.."+sdf.format(new Date()));43 Thread.sleep(1000);44 System.out.println(Thread.currentThread().getName()+"read data is"+data);45 }catch (InterruptedException e) {46 e.printStackTrace();47 }finally{48 rwLock.readLock().unlock();//读锁解锁49 }50 }51 52 public void put(Integer data){53 rwLock.writeLock().lock();//写锁开启,这时只有一个写线程进入54 try{
//用try finally来防止因异常而造成的死锁55 System.out.println(Thread.currentThread().getName()+"write lock is ready.."+sdf.format(new Date()));56 Thread.sleep(1000);57 this.data = data;58 System.out.println(Thread.currentThread().getName()+"write data is"+data); 59 60 }catch (InterruptedException e) {61 e.printStackTrace();62 }finally{63 rwLock.writeLock().unlock();//写锁解锁64 }65 }66 }

运行结果如下:

 

转载于:https://www.cnblogs.com/XinHuai/p/6830790.html

你可能感兴趣的文章
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>
DevOps 前世今生 | mPaaS 线上直播 CodeHub #1 回顾
查看>>
iOS 解决UITabelView刷新闪动
查看>>
CentOS 7 装vim遇到的问题和解决方法
查看>>
JavaScript基础教程1-20160612
查看>>
ios xmpp demo
查看>>
python matplotlib 中文显示参数设置
查看>>
【ros】Create a ROS package:package dependencies报错
查看>>
通过容器编排和服务网格来改进Java微服务的可测性
查看>>
re:Invent解读:没想到你是这样的AWS
查看>>
PyTips 0x02 - Python 中的函数式编程
查看>>
使用《Deep Image Prior》来做图像复原
查看>>
Linux基础命令---rmdir
查看>>
Android图片添加水印图片并把图片保存到文件存储
查看>>
BigDecimal 舍入模式(Rounding mode)介绍
查看>>
开源 免费 java CMS - FreeCMS1.2-标签 infoSign
查看>>
Squid 反向代理服务器配置
查看>>
Java I/O操作
查看>>
Tomcat性能调优
查看>>
Android自学--一篇文章基本掌握所有的常用View组件
查看>>