亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

舉例說明Java多線程編程中讀寫鎖的使用

2020-01-24 01:16:56
字體:
來源:轉載
供稿:網友

以下示例為 java api并發庫中 ReentrantReadWriteLock自帶的實例,下面進行解讀

 class CachedData {  Object data;  volatile boolean cacheValid;  ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();  void processCachedData() {   rwl.readLock().lock();//@1   if (!cacheValid) {    // Must release read lock before acquiring write lock    rwl.readLock().unlock();//@4    rwl.writeLock().lock();//@2    // Recheck state because another thread might have acquired    //  write lock and changed state before we did.    if (!cacheValid) {//@3     data = ...     cacheValid = true;    }    // Downgrade by acquiring read lock before releasing write lock    rwl.readLock().lock();    rwl.writeLock().unlock(); // Unlock write, still hold read   }   use(data);   rwl.readLock().unlock();  } }

當有n多線程 使用同一CachedData 實例對象 調用processCachedData方法時,就會產生線程的并發問題.
@1行,當有線程正在對數據進行 寫操作的時候,運行到@1行的線程要等待 寫操作的完成,因為第一個運行到@2的線程會加上鎖,然后對數據進行需該,期間不允許任何線程進行讀或者是寫的操作,

當寫完后,在該線程上加上讀鎖操作,以防止解寫鎖后,別的線程對數據再次進行寫時出錯.在第一個運行到@2的線程之后的很多線程,

可能已經運行到了@4,當對數據修改好之后,解除掉寫鎖,別的線程就會執行到@2,這時第一個線程已經經數據修改好了,所以有了@3的判斷。

在編寫多線程程序的時候,要置于并發線程的環境下考慮,巧妙的運用ReentrantReadWriteLock,在運用時,注意鎖的降級,寫入鎖可以獲得讀鎖,讀鎖不可以獲得寫入鎖,所以在上寫入鎖時,必須先將讀鎖進行解除,然后上讀鎖。

使用時注意的幾個方面:
    讀鎖是排寫鎖操作的,讀鎖不排讀鎖操作,多個讀鎖可以并發不阻塞。即在讀鎖獲取后和讀鎖釋放之前,寫鎖并不能被任何線程獲得,
      多個讀鎖同時作用期間,試圖獲取寫鎖的線程都處于等待狀態,當最后一個讀鎖釋放后,試圖獲取寫鎖的線程才有機會獲取寫鎖。
    寫鎖是排寫鎖、排讀鎖操作的。當一個線程獲取到寫鎖之后,其他試圖獲取寫鎖和試圖獲取讀鎖的線程都處于等待狀態,直到寫鎖被釋放。
      寫鎖是可以獲得讀鎖的,即:

      rwl.writeLock().lock();      //在寫鎖狀態中,可以獲取讀鎖      rwl.readLock().lock();      rwl.writeLock().unlock();

  讀鎖是不能夠獲得寫鎖的,如果要加寫鎖,本線程必須釋放所持有的讀鎖,即:

      rwl.readLock().lock();      //......      //必須釋放掉讀鎖,才能夠加寫鎖      rwl.readLock().unlock();      rwl.writeLock().lock();

讀寫鎖是線程讀寫同一文件所需要用到的,讀寫鎖是什么東西在這里不做過多的解釋,可以自己去百度或谷歌去搜一下。

謹在此附上我自己寫的緩存系統的簡單實現,你從中也能悟出緩存實現的基本思想

緩存里面有數據就從緩存中取,沒有就給你從其他地方得到。

package cn.com.scl.cache  import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; /**  * 緩存的實現,每個線程只能獲得他自己的緩存,也應該是單例的  * 本類沒有去實現單例,如果需要的話可以自行去實現  * @author scl  *  */ public class CacheSystem {   private Map<String, Object> cache = new HashMap<String,Object>();   private ReadWriteLock rwl = new ReentrantReadWriteLock();   public Object getData(String key){     //先從緩存中去取數據,先加上讀鎖      rwl.readLock().lock();     Object obj = null;     try{       obj = cache.get(key);       if(obj == null){         //先解除讀鎖,在上寫鎖(必須先解除讀鎖才能成功上寫鎖)          rwl.readLock().unlock();         rwl.writeLock().lock();         //去數據庫取數據,再判斷一次是否為null,因為有可能多個線程獲得寫鎖          try{         if(obj == null){           obj = new String("obj is get from db");         }         }finally{           //先上讀鎖,然后再解除寫鎖(這樣可以成功完成,在解除寫鎖前獲得讀鎖,寫鎖被降級--這翻譯的api上的)            rwl.readLock().lock();           rwl.writeLock().unlock();//解除寫鎖,讀鎖仍然持有          }       }     }finally{       rwl.readLock().unlock();     }     return obj;   }  } 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久艹在线视频| 欧美最猛性xxxxx(亚洲精品)| 色噜噜久久综合伊人一本| 成人免费直播live| 欧美电影免费观看| 在线电影av不卡网址| 欧美成人免费一级人片100| 国产精品96久久久久久又黄又硬| 日本高清不卡的在线| 久久人人爽亚洲精品天堂| 成人有码视频在线播放| 国产精品视频免费在线观看| 亚洲无限乱码一二三四麻| 久久国产视频网站| 日本人成精品视频在线| 国产在线98福利播放视频| 国产精品一区久久久| 欧美日韩中文字幕综合视频| 亚洲女成人图区| 日韩av在线看| 亚洲电影免费观看高清完整版在线观看| 国产精品jvid在线观看蜜臀| 欧美最猛性xxxxx(亚洲精品)| 国产精品美女在线| 国产精品视频播放| 一区二区成人av| 欧美中文字幕在线视频| 国产欧美精品一区二区三区-老狼| 日韩av手机在线| 色狠狠av一区二区三区香蕉蜜桃| 国产成人精品av在线| 久久久综合av| 91精品国产自产91精品| 欧美久久久精品| 欧美最猛性xxxxx亚洲精品| 久久久久久综合网天天| 45www国产精品网站| 国产xxx69麻豆国语对白| 亚洲人成在线观看网站高清| 国产精品久久久久久久久久东京| 成人免费看片视频| 欧美亚洲另类视频| 日韩中文字幕视频| 亚洲国产高清福利视频| 久久久av一区| 国产成人在线一区| 亚洲丝袜在线视频| 欧美激情视频网址| 亚洲r级在线观看| 国产精品久久久久久久久久| 亚洲电影在线看| 在线播放国产一区二区三区| 日韩av免费网站| 日韩欧美在线网址| 欧美精品免费看| 亚洲自拍偷拍区| 国产日韩欧美一二三区| 另类色图亚洲色图| 国产成人亚洲综合青青| 欧美精品久久一区二区| 亚洲成人精品视频| 亚洲国产精品久久91精品| 欧美乱妇40p| 一区二区在线视频| 亚洲直播在线一区| 国产福利精品av综合导导航| 亚洲人成自拍网站| 91欧美精品午夜性色福利在线| 国产午夜精品视频免费不卡69堂| 日韩av不卡在线| 欧洲精品在线视频| 狠狠色狠色综合曰曰| 色久欧美在线视频观看| 午夜精品久久久久久久99热浪潮| 精品女厕一区二区三区| 日韩成人高清在线| 日韩激情视频在线| 精品视频在线导航| 亚洲一级黄色av| 日本精品视频网站| 欧美日韩美女在线| 国产精品国模在线| 久久久久女教师免费一区| 国产精品影片在线观看| 美女精品久久久| 亚洲免费一级电影| 97人人爽人人喊人人模波多| 亚洲成年网站在线观看| 久久中文字幕国产| 18久久久久久| 日本成人精品在线| 国产一区玩具在线观看| 8090成年在线看片午夜| 亚洲国产另类 国产精品国产免费| 日本一区二区不卡| 狠狠久久五月精品中文字幕| 国产精品伦子伦免费视频| 亚洲激情在线观看视频免费| 国产精品欧美风情| 亚洲国产三级网| 欧美国产日韩精品| 精品国产一区二区三区久久狼5月| 欧美成人免费一级人片100| 岛国av一区二区| 欧美激情一二区| 性欧美xxxx交| 欧洲亚洲妇女av| 久久精品久久久久电影| 2018中文字幕一区二区三区| 最新69国产成人精品视频免费| www欧美xxxx| 国产亚洲视频在线观看| 久久这里有精品| 欧美高清不卡在线| 亚洲人免费视频| 久久久这里只有精品视频| 亚洲人成在线播放| 国产一区二区三区在线| 国产成人精品一区二区| 国产成人综合av| 国产视频999| 日韩视频免费在线| 成人黄色在线观看| 亚洲国产精品小视频| 欧美中文字幕在线播放| 国产视频精品在线| 精品福利一区二区| 国产精品久久久av久久久| 成人免费视频97| 亚洲老板91色精品久久| 色噜噜狠狠狠综合曰曰曰88av| 美女视频久久黄| 91网站免费看| 国产精品青青在线观看爽香蕉| 亚洲精品之草原avav久久| 亚洲最大福利视频网| 精品国产1区2区| 国产精品久久久久久久久久免费| 日日噜噜噜夜夜爽亚洲精品| 国内精品美女av在线播放| 国产精品成久久久久三级| 日韩av最新在线| 欧美精品性视频| 97视频免费在线看| 91亚洲精品久久久久久久久久久久| 欧美亚洲第一区| 国产精品国产三级国产aⅴ9色| 日韩欧美在线国产| 亚洲第一视频在线观看| 日韩精品小视频| 午夜精品久久久久久久白皮肤| 91久久久精品| 美日韩精品免费视频| 亚洲在线www| 久久亚洲国产成人| 伊人伊人伊人久久| www.99久久热国产日韩欧美.com| 国产精彩精品视频| 亚洲精品国精品久久99热| 国产精品嫩草影院一区二区| 欧美日韩中文字幕日韩欧美| 第一福利永久视频精品| 欧美亚洲午夜视频在线观看| 在线播放亚洲激情|