十二 java多執行緒之Exchanger

2021-09-17 01:37:09 字數 3473 閱讀 6030

github:

今天我們講最後乙個同步工具類exchanger,這個比較簡單,就是讓兩個執行緒交換資料.

exchanger只有兩個方法而已,而且兩個還是一樣的,只是引數不通而已

看過海賊王的人都知道山治和路飛,山治是乙個廚師,手藝那是槓槓的.路飛則是乙個大胃王,超能吃.現在編寫乙個程式,讓山治不斷給路飛做食物,而路飛不斷吃,吃完之後要對山治說感謝.ok,開始編碼

public class food ;

private static random random = new random();

public static string getrandomfood()

}

public class shanzhirunnable implements runnable

@override

public void run() catch (interruptedexception e) }}

}

public class lufeirunnable implements runnable

@override

public void run() catch (interruptedexception e) }}

}

public class testmain 

}

執行結果如下,並擷取部分輸出

==>山治開始做 一品鮑魚

==>山治把 一品鮑魚 給做好了,給路飛送過去

==>山治收到路飛的評語:開吃啦...

==>山治開始做 芝麻肉絲

--->路飛拿到山治做的菜: 一品鮑魚

==>山治把 芝麻肉絲 給做好了,給路飛送過去

--->路飛吃完一品鮑魚

--->路飛拿到山治做的菜: 芝麻肉絲

==>山治收到路飛的評語:一品鮑魚太好吃!太感謝山治了...

==>山治開始做 雞蛋炒西紅柿

--->路飛吃完芝麻肉絲

==>山治把 雞蛋炒西紅柿 給做好了,給路飛送過去

==>山治收到路飛的評語:芝麻肉絲太好吃!太感謝山治了...

--->路飛拿到山治做的菜: 雞蛋炒西紅柿

==>山治開始做 油豆腐鑲肉

==>山治把 油豆腐鑲肉 給做好了,給路飛送過去

--->路飛吃完雞蛋炒西紅柿

--->路飛拿到山治做的菜: 油豆腐鑲肉

==>山治收到路飛的評語:雞蛋炒西紅柿太好吃!太感謝山治了...

==>山治開始做 梅菜蒸魚尾

==>山治把 梅菜蒸魚尾 給做好了,給路飛送過去

--->路飛吃完油豆腐鑲肉

==>山治收到路飛的評語:油豆腐鑲肉太好吃!太感謝山治了...

==>山治開始做 炸子雞

--->路飛拿到山治做的菜: 梅菜蒸魚尾

==>山治把 炸子雞 給做好了,給路飛送過去

--->路飛吃完梅菜蒸魚尾

--->路飛拿到山治做的菜: 炸子雞

==>山治收到路飛的評語:梅菜蒸魚尾太好吃!太感謝山治了...

==>山治開始做 翠竹粉蒸魚

==>山治把 翠竹粉蒸魚 給做好了,給路飛送過去

--->路飛吃完炸子雞

--->路飛拿到山治做的菜: 翠竹粉蒸魚

==>山治收到路飛的評語:炸子雞太好吃!太感謝山治了...

==>山治開始做 風情羊柳

==>山治把 風情羊柳 給做好了,給路飛送過去

現在假設他們倆都沒有耐心,不想一直等一下

public class lufeirunnable implements runnable

@override

public void run() catch (interruptedexception e) catch (timeoutexception e) }}

}

public class shanzhirunnable implements runnable

@override

public void run() catch (interruptedexception e) catch (timeoutexception e) }}

}

執行一下程式:

==>山治開始做 辣子肉丁

--->路飛等的不耐煩了,不想等......開始喝起 東北風

==>山治把 辣子肉丁 給做好了,給路飛送過去

==>山治收到路飛的評語:開吃啦...

==>山治開始做 砂鍋三味

--->路飛吃完辣子肉丁

==>山治把 砂鍋三味 給做好了,給路飛送過去

==>山治收到路飛的評語:辣子肉丁太好吃!太感謝山治了...

--->路飛吃完砂鍋三味

==>山治開始做 甜椒肉絲

==>山治把 甜椒肉絲 給做好了,給路飛送過去

--->路飛吃完甜椒肉絲

==>山治收到路飛的評語:砂鍋三味太好吃!太感謝山治了...

==>山治開始做 一品鮑魚

==>山治把 一品鮑魚 給做好了,給路飛送過去

==>山治等的不耐煩了,不想等......,把 一品鮑魚 其他船員吃了

==>山治開始做 香酥鳳腿

--->路飛等的不耐煩了,不想等......開始喝起 東北風

==>山治把 香酥鳳腿 給做好了,給路飛送過去

==>山治收到路飛的評語:甜椒肉絲太好吃!太感謝山治了...

--->路飛吃完香酥鳳腿

==>山治開始做 雪花片湯

==>山治把 雪花片湯 給做好了,給路飛送過去

--->路飛吃完雪花片湯

==>山治收到路飛的評語:香酥鳳腿太好吃!太感謝山治了...

==>山治開始做 鳳尾金魚

==>山治把 鳳尾金魚 給做好了,給路飛送過去

==>山治收到路飛的評語:雪花片湯太好吃!太感謝山治了...

--->路飛吃完鳳尾金魚

==>山治開始做 三菇浸魚雲

--->路飛等的不耐煩了,不想等......開始喝起 東北風

==>山治把 三菇浸魚雲 給做好了,給路飛送過去

==>山治收到路飛的評語:鳳尾金魚太好吃!太感謝山治了...

--->路飛吃完三菇浸魚雲

==>山治開始做 辣子雞丁

==>山治把 辣子雞丁 給做好了,給路飛送過去

==>山治收到路飛的評語:三菇浸魚雲太好吃!太感謝山治了...

--->路飛吃完辣子雞丁

==>山治開始做 梅乾菜燒肉

通過以上兩個例子,掌握exchanger應該沒有什麼難度.好的,這篇就到這裡.

JAVA多執行緒之 執行緒池

執行緒池顧名思義,就是乙個放置執行緒的池子。就跟資料庫連線池差不多。執行緒池通過對併發執行緒的控制,能有效的節省系統資源的浪費,提高系統的效能。學習執行緒池,先了解一下執行緒池的乙個基本結構 executor是乙個介面,其中只有乙個方法,就是execute方法。所以executor實際就是乙個執行緒...

Java多執行緒之執行緒安全

當多個執行緒訪問某乙個類 物件或方法時 這個類始終都能表現出正確的行為,那麼這個類 物件或方法 就是執行緒安全的。public class mythread extends thread public static void main string args 結果如下 t1正在執行 4 t1正在執行...

java 多執行緒 之 Excutor

excutor介面 提供了一種將任務提交和任務執行機制相分離的方法 excutorservice介面 提供了excutor的管理介面,以及可為跟蹤乙個或多個非同步任務狀態而生成future的方法 scheduledexcutorservice介面 提供了可以安排在給定的延遲後執行或定時執行的命令 方...