java exchange是什么,讓我們一起了解一下?
Exchange位于java.util.concurrent包下面,主要是用于線程之間數據交換的工具類,經常用于管道設計和遺傳算法中,Exchange提供了一個同步點,在這個同步點上,線程完成配對并進行數據的交換。
exchange的目標是什么?
1、exchange只能用于兩個線程進行數據交換,它的交換速率是高效的。
2、exchanger.exchange(object obj):這個方法會阻塞,直到另一個線程也同樣調用這個方法進行數據交換,當然也可以使用timeout避免阻塞過長時間。
具體實戰操作:可以將Exchange看做是一個雙向數據傳輸的SynchronousQueue。
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); ????} }
以上就是小編今天的分享了,希望可以幫助到大家。