在Java中的线程之间传递变量

时间:2012-03-09 22:14:30

标签: java synchronization

我在主类中创建了10个相同的线程(仅通过1到10的主键区分)。在每个线程中我需要读取前一个线程中的字段,即在线程5中,我需要在线程4中读取该字段。问题是我该怎么做?

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字段。

提前致谢:)

1 个答案:

答案 0 :(得分:7)

许多选项:)默认情况下,java集合不同步:

您可以在静态变量/类中创建LinkedBlockingQueue:

您可以使用以下内容包装许多Java集合中的一个:

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

如果你不介意一些复杂问题,但是担心GC开销,请使用Exchanger(我会根据你的情况推荐这个):

如果你真的想要全力以赴并且表现是主要的关注点,你可以使用Disrupter框架(不是为了佯攻):