2012-02-11 119 views
3

最簡單的實現是當我們從單一類主要方法其它類調用實現Runnable:跨線程通信

public static void main(String [] args){ 

    // declarations ... 


    receiver.start(); 
    player.start(); 


} 

說裏面接收器我有while循環,接收數據包價值,我想發送的值到第二個線程。怎麼做?

只是爲了澄清我不關心控制另一個線程的一個線程,我只是希望第一個線程與第二個線程共享值。

拋開一個小問題 - JDK 7 Fork是否真的顯着提高了java併發api的性能?

感謝您的時間,

+1

在這篇文章中有一個掠奪http://stackoverflow.com/questions/2170520/inter-thread-communication-in-java它可以幫助你。 – 2012-02-11 17:23:17

+0

這很好,但現在我很困惑,人數 - 解決方案的數量。 – Aubergine 2012-02-11 17:34:37

回答

4

一個簡單的選擇是使用java.util.concurrent.atomic.AtomicReference(或one of the other Atomic... classes)。創建一個AtomicReference的實例,並將其傳遞給各個線程運行的代碼,並設置接收線程的值。其他線程可以在線程中以線程安全的方式讀取它們的值。

確實JDK 7叉真的大大提高了Java併發API的性能?

不,這只是一個新的API來使一些事情更容易。這不是爲了讓事情變得更快。

1

java.util.concurrent -package包含許多有用的接口和類,用於在線程之間進行安全通信。我不確定我在這裏理解你的用例,但是如果你的player(生產者)應該將任務傳遞給receiver(消費者),那麼你可以使用例如BlockingQueue實現。

+0

這是另一回事,接收者自己獲取值並將它們傳遞給玩家 – Aubergine 2012-02-11 17:26:49