欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Java的Condition接口最佳理解方式

 更新時(shí)間:2023年05月09日 08:59:17   作者:JavaEdge.  
這篇文章主要介紹了關(guān)于Java的Condition接口最佳理解方式,Condition就是實(shí)現(xiàn)了管程里面的條件變量,Java?語言內(nèi)置的管程里只有一個(gè)條件變量,而Lock&Condition實(shí)現(xiàn)的管程支持多個(gè)條件變量,需要的朋友可以參考下

Condition就是實(shí)現(xiàn)了管程里面的條件變量。

Java 語言內(nèi)置的管程里只有一個(gè)條件變量,而Lock&Condition實(shí)現(xiàn)的管程支持多個(gè)條件變量。 支持多個(gè)條件變量,能讓代碼可讀性更好,實(shí)現(xiàn)也更容易。

例如,你看我這里實(shí)現(xiàn)一個(gè)阻塞隊(duì)列,就需要兩個(gè)條件變量:

  • 隊(duì)列不空 空隊(duì)列自然沒有元素能出隊(duì)隊(duì)列不滿
  • 隊(duì)列已滿,當(dāng)然也不可有元素再入隊(duì)

Lock和Condition實(shí)現(xiàn)的管程,線程等待和通知需要調(diào)用await()、signal()、signalAll(),它們的語義和wait()、notify()、notifyAll()相同。

  • Lock&Condition實(shí)現(xiàn)的管程里只能使用await()、signal()、signalAll()
  • synchronized實(shí)現(xiàn)的管程才能使用wait()、notify()、notifyAll()

如果在Lock&Condition實(shí)現(xiàn)的管程里調(diào)用wait()、notify()、notifyAll(),你距離離職就更近一步了。

Thread.sleep() V.S Condition.await()

Object.wait()和Condition.await()的原理是基本一致的,不同在于Condition.await()底層是調(diào)用LockSupport.park()實(shí)現(xiàn)阻塞當(dāng)前線程。它在阻塞當(dāng)前線程前,其實(shí)還做了:

  1. 把當(dāng)前線程添加到條件隊(duì)列
  2. 完全釋放鎖,即讓state=0,然后才調(diào)用LockSupport.park()阻塞當(dāng)前線程

JDK的Lock和Condition不過就是管程的一種實(shí)現(xiàn),一般如何使用呢?

什么是同步與異步?

  • 同步 調(diào)用方需要等待結(jié)果
  • 異步 不需要等待結(jié)果

代碼里如何實(shí)現(xiàn)異步?

  • 調(diào)用方創(chuàng)建一個(gè)子線程,在子線程中執(zhí)行方法調(diào)用,即異步調(diào)用
  • 方法實(shí)現(xiàn)時(shí),創(chuàng)建一個(gè)新的線程執(zhí)行主要邏輯,主線程直接return,即異步方法。

異步場景挺多,比如TCP協(xié)議本身是異步的,日常的RPC調(diào)用,在TCP協(xié)議層面,發(fā)送完RPC請求后,線程不會(huì)等待RPC響應(yīng)結(jié)果。

是不是好奇了,明明日常使用的RPC調(diào)用都是同步的呀?這到底是同步還是異步?

這肯定有人幫忙實(shí)現(xiàn)了異步轉(zhuǎn)同步。比如RPC框架Dubbo,具體它是怎么做到的呢?

對于下面一個(gè)簡單的RPC調(diào)用,默認(rèn)情況下sayHello()是個(gè)同步方法,即執(zhí)行service.sayHello(“dubbo”)時(shí),線程會(huì)停下來等結(jié)果。

DemoService service = 初始化部分省略
String message = service.sayHello("dubbo");
System.out.println(message);

若此時(shí)dump調(diào)用線程的調(diào)用棧

發(fā)現(xiàn)調(diào)用線程阻塞了,線程狀態(tài)是TIMED_WAITING。本來發(fā)送請求是異步的,但是調(diào)用線程卻阻塞了,說明Dubbo幫我們做了異步轉(zhuǎn)同步的事情。通過調(diào)用??吹骄€程是阻塞在DefaultFuture.get(),所以Dubbo異步轉(zhuǎn)同步的功能應(yīng)該是通過DefaultFuture實(shí)現(xiàn)。

DefaultFuture.get()之前發(fā)生了什么呢:

我們的期望:

RPC返回結(jié)果前,阻塞調(diào)用線程,讓調(diào)用線程等待
RPC返回結(jié)果后,喚醒調(diào)用線程,讓調(diào)用線程重新執(zhí)行

這就是經(jīng)典的等待-通知機(jī)制,即管程的實(shí)現(xiàn)方案。

  • 看看Dubbo是怎么實(shí)現(xiàn)的。

到此這篇關(guān)于關(guān)于Java的Condition接口最佳理解方式的文章就介紹到這了,更多相關(guān)Java的Condition接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaCV實(shí)現(xiàn)讀取視頻信息及自動(dòng)截取封面圖詳解

    JavaCV實(shí)現(xiàn)讀取視頻信息及自動(dòng)截取封面圖詳解

    javacv可以幫助我們在java中很方便的使用OpenCV以及FFmpeg相關(guān)的功能接口。本文將利用Javacv實(shí)現(xiàn)在視頻網(wǎng)站中常見的讀取視頻信息和自動(dòng)獲取封面圖的功能,感興趣的可以了解一下
    2022-06-06
  • Day14基礎(chǔ)不牢地動(dòng)山搖-Java基礎(chǔ)

    Day14基礎(chǔ)不牢地動(dòng)山搖-Java基礎(chǔ)

    這篇文章主要給大家介紹了關(guān)于Java中方法使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 使用Java編寫圖形化的菜單的教程

    使用Java編寫圖形化的菜單的教程

    這篇文章主要介紹了使用Java編寫圖形化的菜單的教程,需要的朋友可以參考下
    2015-10-10
  • 示例解析java面向?qū)ο缶幊谭庋b與訪問控制

    示例解析java面向?qū)ο缶幊谭庋b與訪問控制

    這篇文章主要為大家介紹了java封裝與訪問控制的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java利用for循環(huán)輸出空心菱形的實(shí)例代碼

    Java利用for循環(huán)輸出空心菱形的實(shí)例代碼

    這篇文章主要介紹了Java利用for循環(huán)輸出空心菱形的實(shí)例代碼,需要的朋友可以參考下
    2014-02-02
  • Java 使用Docker時(shí)經(jīng)常遇到的五個(gè)問題

    Java 使用Docker時(shí)經(jīng)常遇到的五個(gè)問題

    這篇文章主要介紹了Java 使用Docker時(shí)經(jīng)常遇到的五個(gè)問題的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 通過源代碼分析Mybatis的功能流程詳解

    通過源代碼分析Mybatis的功能流程詳解

    這篇文章主要介紹了通過源代碼分析Mybatis的功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java程序控制邏輯—流程控制

    Java程序控制邏輯—流程控制

    這篇文章主要介紹了Java程序的控制邏輯流程控制,流程控制中最基本的就是條件執(zhí)行,也就是說,一些操作只能在某些條件滿足的情況下才執(zhí)行,在一些條件下執(zhí)行某種操作,在另外一些條件下執(zhí)行另外的操作,需要的朋友可以參考一下
    2022-01-01
  • Java多線程系列之JDK并發(fā)包舉例詳解

    Java多線程系列之JDK并發(fā)包舉例詳解

    Java并發(fā)包提供了許多用于多線程編程的類和接口,這篇文章主要給大家介紹了關(guān)于Java多線程系列之JDK并發(fā)包的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • knife4j3.0.3整合gateway和注冊中心的詳細(xì)過程

    knife4j3.0.3整合gateway和注冊中心的詳細(xì)過程

    這篇文章主要介紹了knife4j3.0.3整合gateway和注冊中心的詳細(xì)過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03

最新評論