Lock的lockInterruptibly()

概述

lockInterruptibly()方法比較特殊,當通過這個方法去獲取鎖時,如果其他線程正在等待獲取鎖,則這個線程能夠響應中斷,即中斷線程的等待狀態。也就使說,當兩個線程同時通過lock.lockInterruptibly()想獲取某個鎖時,假若此時線程A獲取到了鎖,而線程B只有等待,那么對線程B調用threadB.interrupt()方法能夠中斷線程B的等待過程。

注意是:等待的那個線程B可以被中斷,不是正在執行的A線程被中斷


代碼

有關線程中斷的請見:http://blog.csdn.net/zengmingen/article/details/53259966

BussinessClass 業務類代碼
package multithreading.lock;import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class BussinessClass {private Lock lock = new ReentrantLock();// 業務方法public void bFuction() {String tName = Thread.currentThread().getName();try {System.out.println(tName + "-開始獲取鎖..........");lock.lockInterruptibly();System.out.println(tName + "-獲取到鎖了!!!!");System.out.println(tName + "-睡覺了,睡個30秒!");Thread.sleep(30000);System.out.println(tName + "-睡醒了,干活!");for (int i = 0; i < 5; i++) {System.out.println(tName + ":" + i);}} catch (Exception e) {System.out.println(tName+"-我好像被中斷了!");e.printStackTrace();}finally{lock.unlock();System.out.println(tName + "-釋放了鎖");}}}

測試類

package multithreading.lock;import org.junit.Test;public class TestInterruptibly {@Testpublic void testInterruptibly() throws Exception{BussinessClass bc=new BussinessClass();Thread t0=new Thread(){@Overridepublic void run() {bc.bFuction();}};Thread t1=new Thread(){@Overridepublic void run() {bc.bFuction();}};String tName=Thread.currentThread().getName();System.out.println(tName+"-啟動t0!");t0.start();System.out.println(tName+"-我等個5秒,再啟動t1");Thread.sleep(5000);System.out.println(tName+"-啟動t1");t1.start();System.out.println(tName+"-t1獲取不到鎖,t0這貨睡覺了,沒釋放,我等個5秒!");Thread.sleep(5000);System.out.println(tName+"-等了5秒了,不等了,把t1中斷了!");t1.interrupt();Thread.sleep(Long.MAX_VALUE);}}

運行結果

main-啟動t0!
main-我等個5秒,再啟動t1
Thread-0-開始獲取鎖..........
Thread-0-獲取到鎖了!!!!
Thread-0-睡覺了,睡個30秒!
main-啟動t1
main-t1獲取不到鎖,t0這貨睡覺了,沒釋放,我等個5秒!
Thread-1-開始獲取鎖..........
main-等了5秒了,不等了,把t1中斷了!
java.lang.InterruptedException
Thread-1-我好像被中斷了!
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireInterruptibly(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(Unknown Source)
at java.util.concurrent.locks.ReentrantLock.lockInterruptibly(Unknown Source)
at multithreading.lock.BussinessClass.bFuction(BussinessClass.java:15)
at multithreading.lock.TestInterruptibly$2.run(TestInterruptibly.java:23)
Exception in thread "Thread-1" java.lang.IllegalMonitorStateException
at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(Unknown Source)
at java.util.concurrent.locks.ReentrantLock.unlock(Unknown Source)
at multithreading.lock.BussinessClass.bFuction(BussinessClass.java:28)
at multithreading.lock.TestInterruptibly$2.run(TestInterruptibly.java:23)
Thread-0-睡醒了,干活!
Thread-0:0
Thread-0:1
Thread-0:2
Thread-0:3
Thread-0:4
Thread-0-釋放了鎖


-------------

更多的Java,Angular,Android,大數據,J2EE,Python,數據庫,Linux,Java架構師,:

http://www.cnblogs.com/zengmiaogen/p/7083694.html



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538986.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538986.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538986.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python中把輸出結果寫到一個文件中_Python3.6筆記之將程序運行結果輸出到文件的方法...

Python3.6筆記之將程序運行結果輸出到文件的方法 更新時間&#xff1a;2018年04月22日 14:27:32 投稿&#xff1a;jingxian 下面小編就為大家分享一篇Python3.6筆記之將程序運行結果輸出到文件的方法&#xff0c;具有很好的參考價值&#xff0c;希望對大家有所幫助。一起跟隨小…

hangfire.mysql.core_abp 使用 hangfire結合mysql

abp 官方使用的hangfire 默認使用的是sqlserver的存儲mysql須要引入支持mysql的類庫sql我這邊使用的是Hangfire.MySql.Core數據庫直接用nuget安裝便可app首先按照官方文檔要求&#xff0c;改幾個地方sqlserver分別是 Startup 文件下serverservices.AddHangfire(config >{con…

python 圖標題上移_Python-Matplotlib將圖形標題移動到y軸

我目前在python中使用matplotlib來繪制一些數據,但是我希望圖表的標題位于Y軸上,因為沒有足夠的空間來存儲一個圖形的標題和另一個圖形的x軸標簽.我知道我可以將hspace設置為更大的數字但是,我不想這樣做,因為我計劃將幾個圖表堆疊在一起,如果我調整hspace,那么圖表將是真的簡短…

solr的基礎使用

查詢運算符 例如&#xff1a;http://localhost:8984/solr/mycore/select?q*:* : 指定字段查指定值&#xff0c;如返回所有值q*:* ? 匹配單個字符&#xff0c; 例如: qtitle:??拳 可以匹配標題為“形意拳”的文檔 * 匹配零個或多個字符, 例如: qtitle:*形意拳 或者 qtitl…

同步關鍵詞lock

概述 1、API在JDK的java.util.concurrent.locks下。 2、不是Java關鍵字&#xff0c;是接口。 3、ReentrantLock是JDK唯一實現了Lock接口的類。 public interface Lock {//獲取鎖void lock();//可以響應中斷的鎖void lockInterruptibly() throws InterruptedException;//嘗試…

Java bitset轉string_將java BitSet保存到DB

默認情況下,JPA使用Java序列化來保存未知Serializable類型的屬性(以便將序列化表示存儲為byte []).通常它不是您想要的,因為可以有更有效的方式來表示您的數據.例如,BitSet可以有效地表示為數字(如果它的大小有界),或者byte [],或其他東西(遺憾的是,BitSet不提供進行這些轉換的…

python讀取raw圖片文件_在python下讀取并展示raw格式的圖片實例

raw文件可能有些人沒有&#xff0c;因此&#xff0c;先用一張圖片創建一個raw格式的文件&#xff08;其實可以是其他類型的格式文件&#xff09; import numpy as np import cv2 img cv2.imread(cat.jpg) # 這里需要我們在當前目錄下放一張名為cat.jpg的文件 img.tofile(cat.r…

python怎么網絡通信_深入Python中的網絡通信

TCP/IP計算機與網絡設備兩情侶要談戀愛&#xff0c;相互通信&#xff0c;那么雙方就必須有規則。基于相同的方法&#xff0c;不同的硬件、操作系統之間的通信&#xff0c;都需要一種規則。而我們就把這種規則稱為協議(protocol)。TCP/IP 是互聯網相關各類協議族的總稱。TCP/IP是…

ReadWriteLock讀寫文件

概述 ReadWriteLock是一個接口&#xff0c;在它里面只定義了兩個方法&#xff1a;一個讀的鎖和一個寫的鎖。 讀的鎖&#xff1a;A線程獲取了讀的鎖&#xff0c;那么B線程也可以獲取讀的鎖。 寫的鎖&#xff1a;A線程獲取了寫的鎖&#xff0c;那么B線程不能獲取讀也不能獲取寫…

搞懂 Java HashMap 源碼

HashMap 源碼分析 前幾篇分析了 ArrayList &#xff0c; LinkedList &#xff0c;Vector &#xff0c;Stack List 集合的源碼&#xff0c;Java 容器除了包含 List 集合外還包含著 Set 和 Map 兩個重要的集合類型。而 HashMap 則是最具有代表性的&#xff0c;也是我們最常使用到…

python 怎么表示sqlserver null_如何使用Python將sqlserver查詢輸出寫入.txt文件?

我是Python新手&#xff0c;嘗試連接到sqlserverdb并將查詢的輸出轉換成一個flat.txt文件。在一些代碼正在工作&#xff0c;但是只寫了將近1000條記錄&#xff0c;然后就停止了。在Python版本&#xff1a;2.7.13。在下面的代碼能夠把100萬條記錄全部寫入csv文件而不是.txt文件&…

python中object是什么類型_Python 的 type 和 object 之間是怎么一種關系?

class&#xff0c;metaclass&#xff0c;instance&#xff0c;subclass&#xff0c;base 以下成立&#xff1a; 對任意的A&#xff0c;A是instance&#xff08;推論&#xff1a;任意class也是instance&#xff09; 對任意A&#xff0c;存在B&#xff0c;使得B是A的class A是cla…

java8新生代_jdk8.0的jvm詳情

jstat命令可以查看堆內存各部分的使用量&#xff0c;以及加載類的數量。命令的格式如下&#xff1a;jstat [-命令選項] [vmid] [間隔時間/毫秒] [查詢次數]注意&#xff1a;使用的jdk版本是jdk8.[work16-11-118qf-pms]$ jstat -class 32417Loaded?? Bytes?? Unloaded?? B…

Java中的Runnable、Callable、Future、FutureTask的區別與示例

原文地址&#xff1a;http://blog.csdn.net/bboyfeiyu/article/details/24851847 --------------------------------------------------------- Java中存在Runnable、Callable、Future、FutureTask這幾個與線程相關的類或者接口&#xff0c;在Java中也是比較重要的幾個概念&am…

sql count為空時顯示0_C0010負坐標顯示為正數+紅色0值參考線

小伙伴們早上好啊&#xff01;今天繼續為大家分享柱形圖的美化技巧。希望大家認真閱讀Excel文件和教程&#xff0c;有的圖表看起來簡單&#xff0c;實際上在細節處理上用了很多技巧&#xff0c;大家要多多體會。C0010-負坐標顯示為正數紅色0值參考線效果圖圖表概述本圖可以用來…

配置IISExpress允許外部訪問

配置IISExpress允許外部訪問 1.找到IISExpress的配置文件&#xff0c;位于 <文檔>/IISExpress/config文件夾下&#xff0c;打開applicationhost.config&#xff0c;找到如下代碼&#xff1a;<site name"WebSite1" id"1" serverAutoStart"tru…

python布爾測試對象_python布爾類型和邏輯運算

布爾類型 python中True表示真&#xff0c;False表示假&#xff0c;它們是布爾類型&#xff1a;1 2>>> type(True) 在python中&#xff0c;bool的True和False是數值1和0的字符串表示格式&#xff0c;實際上bool類型是int類型的一個子類。1 2>>> bool.__bases_…

mac預裝的php路徑,Mac使用系統自帶php和Apache

最美的語言本文將介紹在Mac環境下如何使用系統本身所帶有的Apache(阿帕奇服務器)通過預裝的PHP版本來運行PHP的相關代碼&#xff0c;相對來講在OS X系統下相對好配置一些&#xff0c;因為Apache和PHP都預裝好了&#xff0c;如果是Windows環境我們需要自己安裝ApachePHPMysql(通…

線程池與Callable更配哦

概述 Callable介紹見&#xff1a;http://blog.csdn.net/zengmingen/article/details/53288119 多線程介紹見&#xff1a;http://blog.csdn.net/zengmingen/article/details/53284999 代碼 TaskCallable.javapackage multithreading.pool;import java.util.concurrent.Callabl…

IP編址,IP地址介紹與子網劃分方法

網絡層位于數據鏈路層與傳輸層之間。網絡層中包含了許多協議&#xff0c;其中最為重要的協議就是IP協議。網絡層提供了IP路由功能。理解IP路由除了要熟悉IP協議的工作機制之外&#xff0c;還必須理解IP編址以及如何合理地使用IP地址來設計網絡。 上層協議類型 以太網幀中的Typ…