2012-03-09 38 views
2

我在主類中創建了10個相同的線程(僅通過主鍵從1到10區分)。在每個線程中,我需要讀取前一個線程中的字段,即線程5中的字段。我需要在線程4中讀取此字段。問題是,我該怎麼做?在Java中的線程之間傳遞變量

public class Player extends Thread { 

private Integer playerNumber; 

public char lastDigit; 

public Player(Integer playerNumber) { 
    super(); 
    this.playerNumber = playerNumber; 
} 

public synchronized char getDigit(){ 
    return this.lastDigit; 
} 

public synchronized void setDigit(char digit){ 
    massage += digit; 
    this.lastDigit = digit; 
    try { 
     Thread.sleep(1); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

public void run(){ 

} 

我需要閱讀lastDigit字段。提前:)

回答

7

很多的選擇:)默認情況下

感謝,Java集合不syncronized:

你可以做的LinkedBlockingQueue在一個靜態變量/類:

您可以使用以下命令打包許多java集合中的一個:

  • Collections.synchronizedMap(..)
  • Collections.synchronizedList(..)
  • Collections.synchronizedSet(..)

如果你不介意的一些併發症,但關注GC開銷,使用交換器(我建議這對於您的情況):

如果reallly要全力以赴,性能是一個主要關注,你可以使用干擾器框架(不適合心臟佯攻):

+3

差不多我最喜歡的課程:) – Adam 2012-03-09 22:21:59

+0

爲什麼你需要一個集合來讀取一個數字? – GETah 2012-03-09 22:29:35

+0

非常真實,我編輯說Exchanger可能是最適合他的應用程序。使用交換器,交換方法會阻塞,直到線程之間發生「握手」。所以只要他總是試圖與先前的線程交流(認爲餐飲哲學家的問題),這是一個不錯的選擇:) – 2012-03-09 22:38:53