最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java編程線(xiàn)程同步工具Exchanger的使用實(shí)例解析

 更新時(shí)間:2022年10月21日 16:56:47   作者:eson_15  
這篇文章主要介紹了Java編程線(xiàn)程同步工具Exchanger的使用實(shí)例解析,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下

本文研究的主要是Java編程線(xiàn)程同步工具Exchanger的使用,下面看看具體內(nèi)容。

  如果兩個(gè)線(xiàn)程在運(yùn)行過(guò)程中需要交換彼此的信息,比如一個(gè)數(shù)據(jù)或者使用的空間,就需要用到Exchanger這個(gè)類(lèi),Exchanger為線(xiàn)程交換信息提供了非常方便的途徑,它可以作為兩個(gè)線(xiàn)程交換對(duì)象的同步點(diǎn),只有當(dāng)每個(gè)線(xiàn)程都在進(jìn)入 exchange ()方法并給出對(duì)象時(shí),才能接受其他線(xiàn)程返回時(shí)給出的對(duì)象。

  每次只能兩個(gè)線(xiàn)程交換數(shù)據(jù),如果有多個(gè)線(xiàn)程,也只有兩個(gè)能交換數(shù)據(jù)。下面看個(gè)通俗的例子:一手交錢(qián)一首交貨!

public class ExchangerTest {
	public static void main(String[] args) {
		ExecutorService service = Executors.newCachedThreadPool();
		final Exchanger exchanger = new Exchanger();
		//定義一個(gè)交換對(duì)象,用來(lái)交換數(shù)據(jù)
		//開(kāi)啟一個(gè)線(xiàn)程執(zhí)行任務(wù)
		service.execute(new Runnable(){
			@Override
			      public void run() {
				try {
					String data1 = "海";
					System.out.println("線(xiàn)程" + Thread.currentThread().getName() 
					              + "正在把品" + data1 + "拿出來(lái)");
					Thread.sleep((long)(Math.random()*10000));
					//把要交換的數(shù)據(jù)傳到exchange方法中,然后被阻塞,等待另一個(gè)線(xiàn)程與之交換。返回交換后的數(shù)據(jù)
					String data2 = (String)exchanger.exchange(data1);
					System.out.println("線(xiàn)程" + Thread.currentThread().getName() + 
					          "用海換來(lái)了" + data2);
				}
				catch(Exception e){
				}
				finally {
					service.shutdown();
					System.out.println("交易完畢,拿著錢(qián)快跑!");
				}
			}
		}
		);
		//開(kāi)啟另一個(gè)線(xiàn)程執(zhí)行任務(wù)
		service.execute(new Runnable(){
			@Override
			      public void run() {
				try {
					String data1 = "300萬(wàn)";
					System.out.println("線(xiàn)程" + Thread.currentThread().getName() + 
					          "正在把" + data1 +"拿出來(lái)");
					Thread.sleep((long)(Math.random()*10000));
					String data2 = (String)exchanger.exchange(data1);
					System.out.println("線(xiàn)程" + Thread.currentThread().getName() + 
					          "用300萬(wàn)弄到了" + data2);
				}
				catch(Exception e){
				}
				finally {
					service.shutdown();
					System.out.println("交易完畢,拿著??炫?!");
				}
			}
		}
		);
	}
}

從代碼中我仿佛看到了兩個(gè)人在交易品的場(chǎng)面……來(lái)看一下交易結(jié)果如何:

線(xiàn)程pool-1-thread-1正在把品海拿出來(lái)
線(xiàn)程pool-1-thread-2正在把300萬(wàn)拿出來(lái)
線(xiàn)程pool-1-thread-2用300萬(wàn)弄到了海
線(xiàn)程pool-1-thread-1用海換來(lái)了300萬(wàn)
交易完畢,拿著海快跑!
交易完畢,拿著錢(qián)快跑!

 跑的倒是快,從運(yùn)行結(jié)果來(lái)看,確實(shí)實(shí)現(xiàn)了數(shù)據(jù)的交換,這個(gè)只是交換一個(gè)基本類(lèi)型的數(shù)據(jù)而已,它真正的用處不僅僅局限于此,比如我們可以交換一個(gè)對(duì)象,這就有用了,JDK官方提到了一個(gè)高級(jí)的應(yīng)用:

使用 Exchanger 在線(xiàn)程間交換緩沖區(qū),因此,在需要時(shí),填充緩沖區(qū)的線(xiàn)程獲取一個(gè)新騰空的緩沖區(qū),并將填滿(mǎn)的緩沖區(qū)傳遞給騰空緩沖區(qū)的線(xiàn)程。

  這就得根據(jù)實(shí)際情況了,思想和上面的一樣,實(shí)際中肯定要定義一個(gè)緩沖區(qū)的類(lèi),然后兩個(gè)線(xiàn)程之間交換的就是這個(gè)緩沖區(qū)的類(lèi)即可,至于類(lèi)中如何實(shí)現(xiàn),就得看實(shí)際情況了。Exchanger的使用就總結(jié)這么多吧~

總結(jié)

以上就是本文關(guān)于Java編程線(xiàn)程同步工具Exchanger的使用實(shí)例解析的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專(zhuān)題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • Java線(xiàn)程池詳細(xì)解讀

    Java線(xiàn)程池詳細(xì)解讀

    這篇文章主要給大家介紹了關(guān)于Java中方法使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • Spring之AOP兩種代理機(jī)制對(duì)比分析(JDK和CGLib動(dòng)態(tài)代理)

    Spring之AOP兩種代理機(jī)制對(duì)比分析(JDK和CGLib動(dòng)態(tài)代理)

    這篇文章主要介紹了Spring之AOP兩種代理機(jī)制對(duì)比分析(JDK和CGLib動(dòng)態(tài)代理),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Java實(shí)現(xiàn)消息轟炸的方法 附帶源碼

    Java實(shí)現(xiàn)消息轟炸的方法 附帶源碼

    這篇文章主要介紹了Java實(shí)現(xiàn)消息轟炸的方法 附帶源碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • java中復(fù)雜查詢(xún)sql語(yǔ)句該怎么寫(xiě)

    java中復(fù)雜查詢(xún)sql語(yǔ)句該怎么寫(xiě)

    我們知道在java連接數(shù)據(jù)庫(kù)之后,需要數(shù)據(jù)庫(kù)的sql語(yǔ)句,下面這篇文章主要給大家介紹了關(guān)于java中復(fù)雜查詢(xún)sql語(yǔ)句該怎么寫(xiě)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • java8使用Stream API方法總結(jié)

    java8使用Stream API方法總結(jié)

    在本篇文章里小編給大家分享了關(guān)于java8使用Stream API方法相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-04-04
  • SpringBoot去除內(nèi)嵌tomcat的實(shí)現(xiàn)

    SpringBoot去除內(nèi)嵌tomcat的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot去除內(nèi)嵌tomcat的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • spring boot實(shí)現(xiàn)阿里云視頻點(diǎn)播上傳視頻功能(復(fù)制粘貼即可)

    spring boot實(shí)現(xiàn)阿里云視頻點(diǎn)播上傳視頻功能(復(fù)制粘貼即可)

    這篇文章主要介紹了spring boot實(shí)現(xiàn)阿里云視頻點(diǎn)播上傳視頻功能(復(fù)制粘貼即可),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java設(shè)計(jì)模式中的建造者(Builder)模式解讀

    Java設(shè)計(jì)模式中的建造者(Builder)模式解讀

    這篇文章主要介紹了Java設(shè)計(jì)模式中的建造者(Builder)模式解讀, 建造者模式是一種創(chuàng)建對(duì)象的設(shè)計(jì)模式,它通過(guò)將對(duì)象的構(gòu)建過(guò)程分解為多個(gè)步驟,并使用一個(gè)建造者類(lèi)來(lái)封裝這些步驟,從而使得對(duì)象的構(gòu)建過(guò)程更加靈活和可擴(kuò)展,需要的朋友可以參考下
    2023-10-10
  • java實(shí)現(xiàn)歸并排序算法

    java實(shí)現(xiàn)歸并排序算法

    在學(xué)習(xí)算法的過(guò)程中,我們難免會(huì)接觸很多和排序相關(guān)的算法??偠灾?,對(duì)于任何編程人員來(lái)說(shuō),基本的排序算法是必須要掌握的。那么現(xiàn)在我們將要進(jìn)行基本的歸并排序算法的講解
    2016-01-01
  • JAVA類(lèi)變量及類(lèi)方法代碼實(shí)例詳解

    JAVA類(lèi)變量及類(lèi)方法代碼實(shí)例詳解

    這篇文章主要介紹了JAVA類(lèi)變量及類(lèi)方法代碼實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論

南投市| 南阳市| 峡江县| 蒙山县| 若尔盖县| 安远县| 务川| 安丘市| 休宁县| 诸城市| 莱西市| 上饶县| 凌云县| 称多县| 西平县| 翁源县| 文昌市| 莱阳市| 大港区| 云安县| 从化市| 天津市| 内黄县| 蕲春县| 建瓯市| 岗巴县| 年辖:市辖区| 新田县| 万安县| 安康市| 孝感市| 隆化县| 新乡县| 广河县| 宜春市| 昭觉县| 拜城县| 徐水县| 新巴尔虎左旗| 甘洛县| 沙坪坝区|