java中的locksupport_详解Java多线程编程中LockSupport
LockSupport是用來創建鎖和其他同步類的基本線程阻塞原語。
LockSupport中的park() 和 unpark() 的作用分別是阻塞線程和解除阻塞線程,而且park()和unpark()不會遇到“Thread.suspend 和 Thread.resume所可能引發的死鎖”問題。
因為park() 和 unpark()有許可的存在;調用 park() 的線程和另一個試圖將其 unpark() 的線程之間的競爭將保持活性。
基本用法LockSupport 很類似于二元信號量(只有1個許可證可供使用),如果這個許可還沒有被占用,當前線程獲取許可并繼 續 執行;如果許可已經被占用,當前線 程阻塞,等待獲取許可。
運行該代碼,可以發現主線程一直處于阻塞狀態。因為 許可默認是被占用的 ,調用park()時獲取不到許可,所以進入阻塞狀態。
如下代碼:先釋放許可,再獲取許可,主線程能夠正常終止。LockSupport許可的獲取和釋放,一般來說是對應的,如果多次unpark,只有一次park也不會出現什么問題,結果是許可處于可用狀態。
LockSupport是可不重入 的,如果一個線程連續2次調用 LockSupport .park(),那么該線程一定會一直阻塞下去。
這段代碼打印出a和b,不會打印c,因為第二次調用park的時候,線程無法獲取許可出現死鎖。
下面我們來看下LockSupport對應中斷的響應性
最終線程會打印出thread over.true。這說明 線程如果因為調用park而阻塞的話,能夠響應中斷請求(中斷狀態被設置成true),但是不會拋出InterruptedException 。
LockSupport函數列表
LockSupport示例對比下面的“示例1”和“示例2”可以更清晰的了解LockSupport的用法。
示例1
示例2
運行結果:
說明:park和wait的區別。wait讓線程阻塞前,必須通過synchronized獲取同步鎖。
總結
以上是生活随笔為你收集整理的java中的locksupport_详解Java多线程编程中LockSupport的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java8学习_java8学习
- 下一篇: java hashmap object_