我在主类中创建了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字段。
提前致谢:)
答案 0 :(得分:7)
许多选项:)默认情况下,java集合不同步:
您可以在静态变量/类中创建LinkedBlockingQueue:
您可以使用以下内容包装许多Java集合中的一个:
如果你不介意一些复杂问题,但是担心GC开销,请使用Exchanger(我会根据你的情况推荐这个):
如果你真的想要全力以赴并且表现是主要的关注点,你可以使用Disrupter框架(不是为了佯攻):