1. 程式人生 > >java多執行緒:併發包中ReentrantReadWriteLock讀寫鎖的鎖降級模板

java多執行緒:併發包中ReentrantReadWriteLock讀寫鎖的鎖降級模板

寫鎖降級為讀鎖,但讀鎖不可升級或降級為寫鎖。 鎖降級是為了讓當前執行緒感知到資料的變化。
 1  //讀寫鎖
 2     private ReentrantReadWriteLock lock=new ReentrantReadWriteLock();
 3     //讀鎖
 4     private ReadLock readLock=lock.readLock();
 5     //寫鎖
 6     private WriteLock writeLock=lock.writeLock();
 7     private boolean update;
 8     
 9   public void processData(){
10       //讀鎖獲取
11 readLock.lock(); 12 13 if(!update){ 14 //必須先釋放讀鎖 15 readLock.unlock(); 16 17 //鎖降級從獲取寫鎖開始 18 writeLock.lock(); 19 try { 20 if(!update){ 21 //準備資料流程(略) 22 update=true
; 23 } 24 //獲取讀鎖。在寫鎖持有期間獲取讀鎖 25 //此處獲取讀鎖,是為了防止,當釋放寫鎖後,又有一個執行緒T獲取鎖,對資料進行改變,而當前執行緒下面對改變的資料無法感知。 26 //如果獲取了讀鎖,則執行緒T則被阻塞,直到當前執行緒釋放了讀鎖,那個T執行緒才有可能獲取寫鎖。 27 readLock.lock(); 28 }finally{ 29 //
釋放寫鎖 30 writeLock.unlock(); 31 } 32 //鎖降級完成 33 } 34 35 try { 36 //使用資料的流程 37 } finally{ 38 //釋放讀鎖 39 readLock.unlock(); 40 } 41 42 }
View Code

相關推薦

java執行發包ReentrantReadWriteLock降級模板

寫鎖降級為讀鎖,但讀鎖不可升級或降級為寫鎖。 鎖降級是為了讓當前執行緒感知到資料的變化。 1 //讀寫鎖 2 private ReentrantReadWriteLock lock=new ReentrantReadWriteLock(); 3 //讀鎖 4

java執行發包ReentrantReadWriteLock降級模板 降級

寫鎖降級為讀鎖,但讀鎖不可升級或降級為寫鎖。 鎖降級是為了讓當前執行緒感知到資料的變化。 1 //讀寫鎖 2 private ReentrantReadWriteLock lock=new ReentrantReadWriteLock(); 3 /

JAVA執行之——發包JUC——Atomic

前面學習了基礎的多執行緒知識。今天開始學習JAVA的併發包java.util.concurrent。java併發包包括 java.util.concurrent、java.util.concurrent.atomic、java.util.concurrent.l

Java執行發包,併發佇列

目錄 1 併發包 2 併發佇列 1 併發包 1.1同步容器類 1.1.1Vector與ArrayList區別 1.1.1.1 ArrayList是最常用的List實現類,內部是通過陣列實現的,它允許對

Java 執行高併發 3.5 — ReadWriteLock 使用

ReadWriteLock 又稱為共享鎖,的讀寫分離鎖,內部分為讀鎖和寫鎖 關於 A 和 B 執行緒,讀和寫的關係 A 讀 — B 讀:不互斥、不阻塞 A 讀 — B 寫:互斥,互相阻塞 A 寫 — B 寫:互斥,互相阻塞 用法:非常簡單,和 Reentra

java執行環境下對變數的操作的原子性問題

本文轉載自:http://www.cnblogs.com/qlee/archive/2011/09/13/2174434.html 以下多執行緒對int型變數x的操作,哪幾個需要進行同步:( )A. x=y; B. x++; C. ++x; D. x=1;從表面看上去實在

java執行5.1 -基礎

什麼是鎖 提到多執行緒,立馬就有人說加鎖,什麼是鎖,為什麼加鎖? 鎖:從字面意義,什麼東西加了鎖,那麼就只有有鑰匙的人才能使用,多執行緒中的鎖,也是這個意思。 為什麼加鎖:當單執行緒的時候,無論訪問什麼資源,都不需要考慮鎖的問題,但是當多個執行緒訪問同一個資源,就會發生很多千奇百怪的

java執行3 執行狀態

執行緒從建立到結束執行,經過多個狀態,每個狀態對應著不同的操作,具體如下: 1 建立(new),2 可以執行(runnable)、3 執行(running)、4 等待(waiting)、5 阻塞(blocked)、6 結束(dead) 建立執行緒 當通過new Thre

java執行2 建立執行

如何建立一個多執行緒: Java提供了java.lang.Thread類,這就是執行緒的定義類,包含了:執行緒的優先順序,執行緒id、執行緒狀態等執行緒的基本資訊。 通過Thread類的說明,可以知道建立執行緒的兩種方式:1 extends Thread類,2 implements

java執行1程序和執行

多執行緒樣例 我們用工人卸貨舉例:有一集裝箱的貨物等待卸車,共100個箱子,一個工人一次只能搬一個箱子。 如果只有一個工人,那麼該工人需要搬運100次,而且是不停歇的搬運。 如果有5個或者10個工人,那麼平均每個工人只需要搬運20或者10次就可以了。 甚至有1

Java執行

                         

java執行執行的通訊、喚醒等待機制、生產消費者模式、Lock

執行緒的通訊:印表機列印–不斷的輸入輸出 package com.qianfeng.test; /* * 執行緒的通訊: * 分析: * 需要兩個執行緒--輸入執行緒和輸出執行緒 * 需要兩個任務--輸入任務和輸出任務 * 需要一份資料 * *

Java執行執行基礎

多執行緒基礎 多執行緒實現-Thread和Runnable 通常使用如下程式碼啟動一個新的執行緒: private void startNewThread1() { new Thread() { @Override pub

初學Java執行執行返回資料的兩種方法

從執行緒中返回資料和向執行緒傳遞資料類似。也可以通過類成員以及回撥函式來返回資料。但類成員在返回資料和傳遞資料時有一些區別,下面讓我們來看看它們區別在哪。 一、通過類變數和方法返回資料 使用這種方法返回資料需要在呼叫start方法後才能通過類變數或方法得到資料。讓我們先來看

java執行3、Java執行的支援1

宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 1、Java在語言級提供了對多執行緒程式設計的支援。 2、實現多執行緒程式的兩種方式 3、後臺執行緒 4、yield方法 5、執行緒優先順序 1、Java在語言級提

java執行2、單執行程式與執行程式

宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 單執行緒程式 多執行緒程式 單執行緒程式 在程序的地址空間當中,只有一個執行緒,由這一個執行緒來完成我們程式的執行任務。 如:這就好像有一個患者要動手術,醫院由於人手緊

java執行1、程式、程序和執行

宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 程式 程序 執行緒 程式 是計算機指令的集合,它以檔案的形式儲存在磁碟上。   程序 是一個程式在其自身的地址空間中的一次執行活動。 如:當我

java執行volatile及Timer用法示例

最近寫程式時,需要在java中使用多執行緒共享程式變數。 特別地,我需要另一個執行緒中執行類A的方法function_1。但給定的執行時間只有n毫秒,也就是說我會在n毫秒之後終止function_1的執行。 但問題是,我在主執行緒隨後的程式碼中無法判斷funcion_1是壽

java執行結合執行交替列印10次abc例項,對wait/notify使用的徹底理解

有個朋友看點選開啟連結 裡的三個執行緒“A執行緒列印10次A,B執行緒列印10次B,C執行緒列印10次C,要求執行緒同時執行,交替列印10次ABC。” 這個問題的程式碼,有點不太理解,讓我給看下。不

十二、JAVA執行機器硬體CPU、Java記憶體模型

  大家都知道,計算機在執行程式時,每條指令都是在CPU中執行的,而執行指令過程中,勢必涉及到資料的讀取和寫入。由於程式執行過程中的臨時資料是存放在主存(實體記憶體)當中的,這時就存在一個問題,由於CPU執行速度很快,而從記憶體讀取資料和向記憶體寫入資料的過程跟CPU執行指令的速度比起來要慢的多,因