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

  

在多线程开发中,经常会出现一种情况,我们希望<强>读写分离强。就是对于读取这个动作来说,可以同时有多个线程同时去读取这个资源,但是对于写这个动作来说,只能同时有一个线程来操作,而且同时,当有一个写线程在操作这个资源的时候,其他的读线程是不能来操作这个资源的,这样就极大的发挥了多线程的特点,能很好的将多线程的能力发挥出来。
  

  

在Java中,ReadWriteLock这个接口就为我们实现了这个需求,通过他的实现类ReentrantReadWriteLock我们可以很简单的来实现刚才的效果,下面我们使用一个例子来说明这个类的用法。

        包com.bird.concursey.charpet3;   进口java.util.concurrent.locks.ReadWriteLock;   进口java.util.concurrent.locks.ReentrantReadWriteLock;   公开课PricesInfo {   私人双price1;   私人双price2;   私人ReadWriteLock锁;   公共PricesInfo () {   price1=1.0;   price2=2.0;   锁=new ReentrantReadWriteLock ();   }   公共双getPrice1 () {//读取资源锁定   .lock lock.readLock () ();   双精度值=https://www.yisu.com/zixun/price1;   .unlock lock.readLock () ();   返回值;   }   公共双getPrice2 () {   .lock lock.readLock () ();   双精度值=price2;   .unlock lock.readLock () ();   返回值;   }   公共空间setPrices(双price1,双price2) {   .lock lock.writeLock () ();   这一点。price1=price1;   这一点。price2=price2;   .unlock lock.writeLock () ();   }   }      

  

下面是读和写两个不同的类

        包com.bird.concursey.charpet3;   公共类读者实现Runnable {   私人PricesInfo PricesInfo;   公共读者(PricesInfo PricesInfo) {   这一点。pricesInfo=pricesInfo;   }   @Override   公共空间run () {   for (int i=0;我& lt;10;我+ +){   系统。printf (" % s:价格1:% f \ n”, Thread.currentThread ()   . getname (), pricesInfo.getPrice1 ());   系统。printf (" % s:价格2:% f \ n”, Thread.currentThread ()   . getname (), pricesInfo.getPrice2 ());   }   }   }            包com.bird.concursey.charpet3;   公共类作家实现Runnable {   私人PricesInfo PricesInfo;   公共作家(PricesInfo PricesInfo) {   这一点。pricesInfo=pricesInfo;   }   @Override   公共空间run () {   for (int i=0;我& lt;3;我+ +){   系统。printf("作家:尝试修改价格。\ n”);   pricesInfo.setPrices (Math . random() * 10,数学。随机()* 8);   系统。printf("作家:价格已经修改。\ n”);   尝试{   thread . sleep (2);   }捕捉(InterruptedException e) {   e.printStackTrace ();   }   }   }   公共静态void main (String [] args) {   PricesInfo PricesInfo=new PricesInfo ();   读者读者[]=新读者[5];   线程threadsReader[]=新线程[5];   for (int i=0;我& lt;5;我+ +){   [我]=新读者读者(pricesInfo);   threadsReader[我]=新线程(读者[我]);   }   作家作家=new作家(pricesInfo);   线程threadWriter=新线程(作家);   for (int i=0;我& lt;5;我+ +){   threadsReader[我].start ();   }   threadWriter.start ();   }   }      

<强>总结

  

以上就是本文关于Java多线程之readwritelock读写分离的实现代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以参阅:Java多线程阻塞与唤醒代码示例,,Java多线程ForkJoinPool实例详解,,详Java中解的互斥锁信号量和多线程等待机制,,Java通过卖票理解多线程等,有什么问题可以随时留的言,小编会及时回复大家的。感谢朋友们对网站的支持。

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