2012-03-09 88 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