我們通常把Exchanger稱為"交換器",它提供了線程之間交換對象的同步點(diǎn)。"交換器"Exchanger提供了exchange方法來完成線程之間對象的交換,線程會(huì)向exchange方法傳遞對象同時(shí)接收其它線程的返回對象。 Exchanger位于java.util.concurrent包下,我們可以通過一個(gè)無參的構(gòu)造器完成它的對象創(chuàng)建。Exchanger提供了兩個(gè)方法來完成對象的交換,分別是:1.exchange(V x)方法會(huì)在交換點(diǎn)上等待其它線程到達(dá),同時(shí)將對象傳遞進(jìn)去,之后接收其他線程的對象作為其返回。2.exchange(V x,long timeout,TimeUnit unit)方法與前一個(gè)方法功能是一樣的,唯一的區(qū)別是增加了等待時(shí)間上的限制。為了演示"交換器"的使用,我們看一個(gè)實(shí)例:
例子中創(chuàng)建了兩個(gè)線程對象,一個(gè)是Apple對象,另一個(gè)是Orange對象。Apple對象把"apple"字符串傳遞到交換器中,得到了"orange"字符串的返回,并把它打印了出來。Orange對象把"orange"字符串傳遞到交換器中,得到了"apple"字符串的返回,并把它打印了出來。在Testing類中創(chuàng)建了交換器對象,并把這個(gè)交換器傳遞到兩個(gè)線程對象中,啟動(dòng)線程分別輸出結(jié)果。交換器通常應(yīng)用在諸如管道設(shè)計(jì)的程序中,在遺傳算法上也有廣泛的應(yīng)用。下一篇文章我將跟大家聊一聊Semaphore的應(yīng)用,請大家持續(xù)關(guān)注。 |
|