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 //讀鎖獲取View Code11 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 }
相關推薦
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多執行緒:執行緒的通訊、喚醒等待機制、生產消費者模式、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執行指令的速度比起來要慢的多,因