日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线程: ReentrantLock类

發布時間:2025/6/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程: ReentrantLock类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用ReentrantLock實現同步

? ReentrantLock對象的lock()方法獲取鎖, 調用unlock()方法釋放鎖

? 調用ReentrantLock對象的lock()方法的線程就持有"對象監視器",其他線程只有等待鎖被釋放時再次爭搶。效果和使用synchronized關鍵字一樣。

? ?關鍵字synchronized與wait()和notify()/notifyAll()方法相結合可以實現等待/通知模式, 類ReentrantLock也可以實現同樣的功能,但需要借助于Condition對象。Condition類是再jdk5中出現的技術,使用它有更好的靈活性,比如可以實現多路通知功能。使用ReentrantLock結合Condition類是可以實現"選擇性通知",這個功能非常重要。

import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock;public class MySservice {private ReentrantLock lock = new ReentrantLock();private Condition conditionA = lock.newCondition();private Condition conditionB = lock.newCondition();private boolean hasValue = false;public void set(){try {lock.lock();while(hasValue == true){System.out.println("setsetsetset"+Thread.currentThread().getName());conditionA.await();}System.out.println("set");hasValue = true;conditionB.signal();} catch (InterruptedException e) {e.printStackTrace();}finally {lock.unlock();}}public void get(){try {lock.lock();while(hasValue == false){System.out.println("getgetgetget");conditionB.await();}System.out.println("get");hasValue = false;conditionA.signal();} catch (InterruptedException e) {e.printStackTrace();}finally {lock.unlock();}} }public class MyThreadA extends Thread {private MySservice mySservice;public MyThreadA(MySservice mySservice){super();this.mySservice = mySservice;}@Overridepublic void run(){for (int i = 0; i < Integer.MAX_VALUE; i++) {mySservice.set();}} }public class MyThreadB extends Thread {private MySservice mySservice;public MyThreadB(MySservice mySservice){super();this.mySservice = mySservice;}@Overridepublic void run(){for (int i = 0; i < Integer.MAX_VALUE; i++) {mySservice.get();}} }public class Run {public static void main(String[] args) {MySservice mySservice = new MySservice();MyThreadA[] myThreadA = new MyThreadA[10];MyThreadB[] myThreadB = new MyThreadB[10];for (int i = 0; i < 10; i++) {myThreadA[i] = new MyThreadA(mySservice);myThreadB[i] = new MyThreadB(mySservice);myThreadA[i].setName((i+1)+"");myThreadA[i].start();myThreadB[i].start();}} }

方法getHoldCount()

? 該方法是查詢當前線程保持此鎖定的個數,也就是調用lock()方法的次數

import java.util.concurrent.locks.ReentrantLock;public class Service {private ReentrantLock lock = new ReentrantLock();public void serviceMethod1(){try{lock.lock();System.out.println("serviceMethod1 getHoldCount="+lock.getHoldCount());serviceMethod2();}finally {lock.unlock();}}public void serviceMethod2(){try{lock.lock();System.out.println("serviceMethod2 getHoldCount="+lock.getHoldCount());}finally {lock.unlock();}} }public class Run {public static void main(String[] args) {Service service = new Service();service.serviceMethod1();} }

?方法getQueueLength()

??返回正等待獲取此鎖定的線程估計數。

public class Run {public static void main(String[] args) throws InterruptedException {final Service service = new Service();Runnable runnable = new Runnable() {@Overridepublic void run() {service.serviceMethod1();}};Thread[] threadArray = new Thread[10];for (int i = 0; i < 10; i++) {threadArray[i] = new Thread(runnable);}for (int i = 0; i < 10; i++) {threadArray[i].start();}Thread.sleep(2000);System.out.println("有線程樹:"+service.lock.getQueueLength()+"正在等待鎖!");} }import java.util.concurrent.locks.ReentrantLock;public class Service {public ReentrantLock lock = new ReentrantLock();public void serviceMethod1(){try{lock.lock();System.out.println("ThreadName="+Thread.currentThread().getName()+" 進入方法!");Thread.sleep(1000);}catch(InterruptedException ex){ex.printStackTrace();}finally {lock.unlock();}} }

方法hasQueuedThread(), hasQueuedThreads()

import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock;public class Service {public ReentrantLock lock = new ReentrantLock();public Condition newCondition = lock.newCondition();public void waitMethod(){try{lock.lock();Thread.sleep(Integer.MAX_VALUE);}catch (InterruptedException ex){ex.printStackTrace();}finally {lock.unlock();}} }public class Run {public static void main(String[] args) throws InterruptedException {final Service service = new Service();Runnable runnable = new Runnable() {@Overridepublic void run() {service.waitMethod();}};Thread threadA = new Thread(runnable);threadA.start();Thread.sleep(500);Thread threadB = new Thread(runnable);threadB.start();Thread.sleep(500);System.out.println(service.lock.hasQueuedThread(threadA));System.out.println(service.lock.hasQueuedThread(threadB));System.out.println(service.lock.hasQueuedThreads());System.out.println(service.lock.getQueueLength());} }

方法isFair()

? ? ?判斷是不是公平鎖

import java.util.concurrent.locks.ReentrantLock;public class Service {private ReentrantLock lock;public Service(boolean isFair){super();lock = new ReentrantLock(isFair);}public void serviceMethod(){try{lock.lock();System.out.println(Thread.currentThread().getName()+" 公平鎖情況:"+lock.isFair());}finally {lock.unlock();}} }public class Run {public static void main(String[] args) {Service service1 = new Service(true);Runnable runnable = new Runnable() {@Overridepublic void run() {service1.serviceMethod();}};Thread t1 = new Thread(runnable,"A");t1.start();Service service2 = new Service(false);Runnable runnable2 = new Runnable() {@Overridepublic void run() {service2.serviceMethod();}};Thread t2 = new Thread(runnable2,"B");t2.start();} }

方法isHeldByCurrentThread()

? 查詢當前線程是否保持此鎖定

import java.util.concurrent.locks.ReentrantLock;public class Service {private ReentrantLock lock;public Service(){super();lock = new ReentrantLock();}public void serviceMethod(){try{System.out.println("當前線程是否保持此鎖定"+lock.isHeldByCurrentThread());lock.lock();System.out.println("當前線程是否保持此鎖定"+lock.isHeldByCurrentThread());}finally {lock.unlock();}} }public class Run {public static void main(String[] args) {final Service service1 = new Service();Runnable runnable = new Runnable() {@Overridepublic void run() {service1.serviceMethod();}};Thread t = new Thread(runnable);t.start();} }

方法tryLock(long timeout, TimeUnit unit)

? ? ?如果鎖定在給定等待時間內沒有被另一個線程保持,且當前線程未被中斷,則獲取該鎖定

import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock;public class MyService {private ReentrantLock lock = new ReentrantLock();public void waitMethod(){try{if(lock.tryLock(3, TimeUnit.SECONDS)){System.out.println(" "+Thread.currentThread().getName()+"獲得鎖的時間:"+System.currentTimeMillis());Thread.sleep(10000);}else{System.out.println(" "+Thread.currentThread().getName()+"沒有獲得鎖");}}catch (InterruptedException ex){ex.printStackTrace();}finally {if(lock.isHeldByCurrentThread()){lock.unlock();}}} }public class Run {public static void main(String[] args) {final MyService service = new MyService();Runnable runnableRef = new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+" 調用waitMethod時間: "+System.currentTimeMillis());service.waitMethod();}};Thread threadA = new Thread(runnableRef);threadA.setName("A");threadA.start();Thread threadB = new Thread(runnableRef);threadB.setName("B");threadB.start();} }

??

總結

以上是生活随笔為你收集整理的线程: ReentrantLock类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 人妻丰满熟妇aⅴ无码 | 欧美色图久久 | 亚洲精品一区二区三区蜜桃 | 在线免费日韩av | 久久久啊啊啊 | 欧美精品色婷婷五月综合 | 欧美三级 欧美一级 | 欧美亚洲国产日韩 | 日本亚洲最大的色成网站www | 9.1成人看片 | 免费毛片网站在线观看 | 国产精品搬运 | 1区2区视频 | 我色综合| 韩国中文三级hd字幕 | 久久精品欧美日韩精品 | 一边摸上面一边摸下面 | 又黄又爽又色视频 | 日韩欧美国产一区二区三区在线观看 | 奇米色影视 | 91精品国产色综合久久不卡98 | 国产精品美女久久 | 超碰在线观看97 | 在线免费看黄av | 林天顾悦瑶笔趣阁 | 最近日韩中文字幕中文 | 伦理片中文字幕 | 91一区二区三区四区 | 一区二区视频观看 | 少妇高潮一69aⅹ | 国产又粗又猛又黄又爽无遮挡 | 久久久精品人妻一区二区三区色秀 | 欧美黄色片| 欧美人妖乱大交 | 浓精h攵女乱爱av | 黄色片hd | 国产男男gay体育生白袜 | av日韩中文字幕 | 嫩草天堂| 波多一区 | 男人肌肌桶女人肌肌 | 中日韩免费毛片 | 在线视频黄 | 91美女视频网站 | 青青草视频国产 | 天堂亚洲精品 | 国产伦精品一区二区三区视频1 | 久久精品欧美视频 | 国产群p| 五月在线视频 | 蜜桃臀aⅴ精品一区二区三区 | 亚洲同性gay激情无套 | 小妹色播 | 中出 在线 | 97xxxxx| 男人影院在线观看 | 欧美xxxxxx片免费播放软件 | 91精品久久人妻一区二区夜夜夜 | 日本天堂在线 | 免费的黄色的视频 | 人妻中文字幕一区 | 五月综合激情 | 好男人视频www | www.色婷婷| 深夜福利免费视频 | 国产一区二区视频在线播放 | 精品人妻午夜一区二区三区四区 | 国产性猛交普通话对白 | 成人久久影院 | 日本精品一区二区 | 日韩一区二区三区免费在线观看 | 成人av网站在线观看 | 你懂的成人 | 欧美午夜一区二区 | 一本色道久久亚洲综合精品蜜桃 | 欧美日韩中文字幕视频 | 福利视频在线免费观看 | 九九色 | 精品人妻一区二区三区含羞草 | 亚洲AV无码久久精品国产一区 | 久久久久xxxx| 黄频在线 | 亚洲欧洲在线观看 | 91免费网站入口 | 蜜臀aⅴ免费一区二区 | 欧美日韩在线播放三区四区 | 香蕉视频1024 | 少妇精品亚洲一区二区成人 | 熟妇人妻久久中文字幕 | 黄色精品 | 在线中文字幕亚洲 | 干夜夜 | 在线观看黄色的网站 | 久久人精品| 五月激情婷婷综合 | 欧美成人精品欧美一级乱 | 男女羞羞动态图 | 黄色一级免费片 | 韩国三级中文字幕hd浴缸戏 |