java exchange是什么,讓我們一起了解一下?
Exchange位于java.util.concurrent包下面,主要是用于線程之間數(shù)據(jù)交換的工具類,經(jīng)常用于管道設(shè)計(jì)和遺傳算法中,Exchange提供了一個(gè)同步點(diǎn),在這個(gè)同步點(diǎn)上,線程完成配對(duì)并進(jìn)行數(shù)據(jù)的交換。
exchange的目標(biāo)是什么?
1、exchange只能用于兩個(gè)線程進(jìn)行數(shù)據(jù)交換,它的交換速率是高效的。
2、exchanger.exchange(object obj):這個(gè)方法會(huì)阻塞,直到另一個(gè)線程也同樣調(diào)用這個(gè)方法進(jìn)行數(shù)據(jù)交換,當(dāng)然也可以使用timeout避免阻塞過長(zhǎng)時(shí)間。
具體實(shí)戰(zhàn)操作:可以將Exchange看做是一個(gè)雙向數(shù)據(jù)傳輸?shù)腟ynchronousQueue。
package?com.miracle.study.concurrent; import?java.util.concurrent.Exchanger; /** ?*?@author?Miracle ?*?@date?2021/4/14?17:47 ?*/ public?class?ExchangeTest?{ ????public?static?void?main(String[]?args)?throws?InterruptedException?{ ????????Exchanger?exchanger?=?new?Exchanger(); ????????new?Thread(()?->{ ????????????var?data?=?"test01"; ????????????String?exchange?=?null; ????????????try?{ ????????????????exchange?=?(String)?exchanger.exchange(data); ????????????}?catch?(InterruptedException?e)?{ ????????????????e.printStackTrace(); ????????????} ????????????System.out.println(Thread.currentThread()?+?":"?+?data); ????????????System.out.println(Thread.currentThread()?+?":"?+?exchange); ????????}).start(); ????????new?Thread(()?->{ ????????????var?data?=?"test02"; ????????????String?exchange?=?null; ????????????try?{ ????????????????exchange?=?(String)?exchanger.exchange(data); ????????????}?catch?(InterruptedException?e)?{ ????????????????e.printStackTrace(); ????????????} ????????????System.out.println(Thread.currentThread()?+?":"?+?data); ????????????System.out.println(Thread.currentThread()?+?":"?+?exchange); ????????}).start(); ????????Thread.sleep(1000); ????} }
以上就是小編今天的分享了,希望可以幫助到大家。