最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java多線程之readwritelock讀寫分離的實現(xiàn)代碼

 更新時間:2017年10月09日 14:14:44   作者:Bird  
這篇文章主要介紹了Java多線程之readwritelock讀寫分離的相關內容,文中涉及具體實例代碼,具有一定參考價值,需要的朋友可以了解下。

在多線程開發(fā)中,經常會出現(xiàn)一種情況,我們希望讀寫分離。就是對于讀取這個動作來說,可以同時有多個線程同時去讀取這個資源,但是對于寫這個動作來說,只能同時有一個線程來操作,而且同時,當有一個寫線程在操作這個資源的時候,其他的讀線程是不能來操作這個資源的,這樣就極大的發(fā)揮了多線程的特點,能很好的將多線程的能力發(fā)揮出來。

在Java中,ReadWriteLock這個接口就為我們實現(xiàn)了這個需求,通過他的實現(xiàn)類ReentrantReadWriteLock我們可以很簡單的來實現(xiàn)剛才的效果,下面我們使用一個例子來說明這個類的用法。

package com.bird.concursey.charpet3; 
import java.util.concurrent.locks.ReadWriteLock; 
import java.util.concurrent.locks.ReentrantReadWriteLock; 
public class PricesInfo { 
  private double price1; 
  private double price2; 
  private ReadWriteLock lock; 
  public PricesInfo() { 
    price1 = 1.0; 
    price2 = 2.0; 
    lock = new ReentrantReadWriteLock(); 
  } 
  public double getPrice1() { 
    //讀取資源鎖定 
    lock.readLock().lock(); 
    double value = price1; 
    lock.readLock().unlock(); 
    return value; 
  } 
  public double getPrice2() { 
    lock.readLock().lock(); 
    double value = price2; 
    lock.readLock().unlock(); 
    return value; 
  } 
  public void setPrices(double price1, double price2) { 
    lock.writeLock().lock(); 
    this.price1 = price1; 
    this.price2 = price2; 
    lock.writeLock().unlock(); 
  } 
} 

下面是讀和寫兩個不同的類

package com.bird.concursey.charpet3; 
public class Reader implements Runnable { 
  private PricesInfo pricesInfo; 
  public Reader(PricesInfo pricesInfo) { 
    this.pricesInfo = pricesInfo; 
  } 
  @Override 
  public void run() { 
    for (int i = 0; i < 10; i++) { 
      System.out.printf("%s: Price 1: %f\n", Thread.currentThread() 
          .getName(), pricesInfo.getPrice1()); 
      System.out.printf("%s: Price 2: %f\n", Thread.currentThread() 
          .getName(), pricesInfo.getPrice2()); 
    } 
  } 
} 
package com.bird.concursey.charpet3; 
public class Writer implements Runnable { 
  private PricesInfo pricesInfo; 
  public Writer(PricesInfo pricesInfo) { 
    this.pricesInfo = pricesInfo; 
  } 
  @Override 
  public void run() { 
    for (int i = 0; i < 3; i++) { 
      System.out.printf("Writer: Attempt to modify the prices.\n"); 
      pricesInfo.setPrices(Math.random() * 10, Math.random( ) * 8); 
      System.out.printf("Writer: Prices have been modified.\n"); 
      try { 
        Thread.sleep(2); 
      } catch (InterruptedException e) { 
        e.printStackTrace(); 
      } 
    } 
  } 
  public static void main(String[] args) { 
    PricesInfo pricesInfo = new PricesInfo(); 
    Reader readers[] = new Reader[5]; 
    Thread threadsReader[] = new Thread[5]; 
    for (int i = 0; i < 5; i++){ 
      readers[i] = new Reader(pricesInfo); 
      threadsReader[i] = new Thread(readers[i]); 
    } 
    Writer writer = new Writer(pricesInfo); 
    Thread threadWriter = new Thread(writer); 
    for (int i = 0; i < 5; i++){ 
      threadsReader[i].start(); 
    } 
    threadWriter.start(); 
  } 
} 

總結

以上就是本文關于Java多線程之readwritelock讀寫分離的實現(xiàn)代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以參閱:Java多線程阻塞與喚醒代碼示例 、 Java多線程ForkJoinPool實例詳解 、 詳解java中的互斥鎖信號量和多線程等待機制  、Java通過賣票理解多線程等,有什么問題可以隨時留言,小編會及時回復大家的。感謝朋友們對腳本之家網站的支持。

相關文章

  • 解決springboot configuration processor對maven子模塊不起作用的問題

    解決springboot configuration processor對maven子模塊不起作用的問題

    這篇文章主要介紹了解決springboot configuration processor對maven子模塊不起作用的問題,本文通過圖文實例代碼給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Springboot整合freemarker和相應的語法詳解

    Springboot整合freemarker和相應的語法詳解

    FreeMarker是一款Spring官方推薦使用的模板引擎。接下來通過本文給大家介紹Springboot整合freemarker和相應的語法,感興趣的朋友一起看看吧
    2021-09-09
  • sentinel?整合spring?cloud限流的過程解析

    sentinel?整合spring?cloud限流的過程解析

    這篇文章主要介紹了sentinel?整合spring?cloud限流,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • Eclipse插件開發(fā)實現(xiàn)控制臺輸出信息的方法

    Eclipse插件開發(fā)實現(xiàn)控制臺輸出信息的方法

    今天小編就為大家分享一篇關于Eclipse插件開發(fā)實現(xiàn)控制臺輸出信息的方法,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java漢字轉成漢語拼音工具類

    Java漢字轉成漢語拼音工具類

    這篇文章主要為大家詳細介紹了Java漢字轉成漢語拼音工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • java將數(shù)字價格轉換為中文大寫代碼示例(工具類)

    java將數(shù)字價格轉換為中文大寫代碼示例(工具類)

    這篇文章主要介紹了java將數(shù)字價格轉換為中文大寫的相關資料,在Java中實現(xiàn)將數(shù)字價格轉換為中文大寫需要將數(shù)字分解為各個部分(如個位、十位、百位等),并根據(jù)這些部分轉換為對應的中文大寫數(shù)字,需要的朋友可以參考下
    2024-10-10
  • spring-boot @Component和@Bean的區(qū)別詳解

    spring-boot @Component和@Bean的區(qū)別詳解

    這篇文章主要介紹了spring-boot @Component和@Bean的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Java中分割字符串的兩種方法實例詳解

    Java中分割字符串的兩種方法實例詳解

    這篇文章主要介紹了Java中分割字符串的兩種方法,一種是java.lang.String 的 split() 方法,,另外一種是用String Tokenizer類。文中的每種方法都給出了詳細的示例代碼,相信對大家的理解和學習具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。
    2016-12-12
  • java實現(xiàn)上傳文件到服務器和客戶端

    java實現(xiàn)上傳文件到服務器和客戶端

    這篇文章主要為大家詳細介紹了java實現(xiàn)上傳文件到服務器和客戶端,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • springboot實現(xiàn)maven多模塊和打包部署

    springboot實現(xiàn)maven多模塊和打包部署

    本文主要介紹了springboot實現(xiàn)maven多模塊和打包部署,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04

最新評論

如东县| 广元市| 沙雅县| 松原市| 蕲春县| 濉溪县| 岳池县| 都昌县| 博野县| 黄大仙区| 宜宾市| 理塘县| 平凉市| 沂水县| 安平县| 抚宁县| 嫩江县| 乡宁县| 甘孜县| 金山区| 济宁市| 台南县| 宜兰县| 铜山县| 安西县| 长汀县| 长乐市| 铜鼓县| 灵武市| 宣武区| 柞水县| 建德市| 东明县| 邯郸市| 图木舒克市| 肇东市| 三亚市| 巨鹿县| 福泉市| 秭归县| 务川|