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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java并发编程的艺术(十)——Java中的锁(5)

發布時間:2023/12/13 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java并发编程的艺术(十)——Java中的锁(5) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. LockSupport工具

1.1 LockSupport的作用

當需要阻塞或喚醒一個線程的時候,都會使用LockSupport工具類來完成相應工作。LockSupport定義了一組公共的靜態方法,這些方法提供了做基本的線程阻塞和喚醒功能。

1.2 LockSupport提供的阻塞和喚醒方法

方法描述
void park()阻塞當前線程,如果調用unpark(Thread)方法或被中斷,才能從park()返回。
void parkNanos(long nanos)阻塞當前線程的超時返回版本,阻塞時間最長不超過nanos納秒。
void parkUntil(long deadline)阻塞當前線程,直到deadline時間(從1970年開始到deadline時間的毫秒數)。
void unpark(Thread)喚醒處于阻塞狀態的線程.

1.3 LockSupport新增的方法

在Java 6中,LockSupport增加了park(Object blocker)、parkNanos(Object blocker, long nanos)、parkUntil(Object blocker, long deadline)這3個方法,用于實現阻塞當前線程的功能,其中參數blocker是用來標識當前線程在等待的對象,該對象主要用于問題排查和系統監控。

2. Condition接口

2.1 Condition接口的理解

Java對象的wait()、notify()等方法和synchronized關鍵字配合,可以實現等待/通知模式。此外還有一種方式可以實現等待/通知模式:Condition接口與Lock接口配合。

2.2 Condition接口示例

public class ConditionUseCase {Lock lock = new ReentrantLock();Condition condition = lock.newCondition();public void conditionWait() throws InterruptedException {lock.lock();try {condition.await();} finally {lock.unlock();}}public void conditionSingnal() throws InterruptedException {lock.lock();try {condition.signal();} finally {lock.unlock();}} } 復制代碼
  • 1.Condition定義了等待/通知模式的相關方法,并且Condition實例是由鎖創建出來的,在調用Condition的這些方法前需先獲得和Condition對象相關聯的鎖。
  • 2.調用await()方法后,當前線程釋放鎖并進入等待狀態,當其他對象調用Condition的signal()方法后當前線程才能從await()方法中返回,且返回前已經獲得了鎖。

2.3 Condition的方法

方法描述
void await() throws InterruptedException當前線程進入等待狀態,直到被通知(signal)或者被中斷。
void awaitUninterruptibly()當前線程進入等待狀態直到被通知,對中斷不做響應。
long awaitNanos(long nanosTimeout) throws InterruptedExceptionvoid await() throws InterruptedException方法的超時等待版本,返回值表示當前剩余的時間,如果在nanosTimeout之前被喚醒,返回值 = nanosTimeout - 實際消耗的時間,返回值 <= 0表示超時。
boolean awaitUntil(Date deadline) throws InterruptedException當前線程進入等待狀態直到被通知、中斷、到達某個時間點。在deadline時間點前線程能被通知或中斷則返回true,否則返回false。
void signal()喚醒一個等待在Condition上的線程。
void signalAll()喚醒所有等待在Condition上的線程。

轉載于:https://juejin.im/post/5d020a41f265da1ba25259af

總結

以上是生活随笔為你收集整理的Java并发编程的艺术(十)——Java中的锁(5)的全部內容,希望文章能夠幫你解決所遇到的問題。

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