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

Java多線程之readwritelock讀寫分離的實現代碼

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

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

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

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讀寫分離的實現代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以參閱: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ā)實現控制臺輸出信息的方法

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

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

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

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

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

    這篇文章主要介紹了java將數字價格轉換為中文大寫的相關資料,在Java中實現將數字價格轉換為中文大寫需要將數字分解為各個部分(如個位、十位、百位等),并根據這些部分轉換為對應的中文大寫數字,需要的朋友可以參考下
    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實現上傳文件到服務器和客戶端

    java實現上傳文件到服務器和客戶端

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

    springboot實現maven多模塊和打包部署

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

最新評論

门源| 正定县| 泽库县| 青田县| 禹城市| 福安市| 蒲江县| 获嘉县| 临泽县| 惠州市| 新乡市| 来凤县| 双峰县| 东安县| 北宁市| 大连市| 东港市| 天全县| 固始县| 九江县| 宁强县| 巢湖市| 锡林郭勒盟| 孝感市| 肥城市| 萨嘎县| 哈尔滨市| 凤冈县| 上虞市| 万山特区| 扎赉特旗| 观塘区| 镶黄旗| 乐陵市| 图木舒克市| 湛江市| 城固县| 离岛区| 中超| 耿马| 舒兰市|