3 Stimmen

Übergabe von Variablen zwischen Threads in Java

Ich habe 10 identische Threads (nur durch Primärschlüssel von 1 bis 10 unterschieden), die ich in der Hauptklasse erstelle. In jedem Thread muss ich ein Feld im vorherigen Thread lesen, d.h. in Thread 5 muss ich dieses Feld in Thread 4 lesen. Die Frage ist: Wie kann ich das machen?

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(){

}

Ich muss das Feld lastDigit lesen.

Vielen Dank im Voraus :)

7voto

Jonathan S. Fisher Punkte 7452

Jede Menge Optionen :) Standardmäßig werden Java-Sammlungen nicht syncronisiert:

Sie könnten eine LinkedBlockingQueue in einer statischen Variablen/Klasse erstellen:

Sie können eine der vielen Java-Sammlungen mit folgendem umhüllen:

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

Wenn Sie nichts gegen eine gewisse Komplikation haben, aber über den GC-Overhead besorgt sind, verwenden Sie Exchanger (ich würde dies für Ihre Situation empfehlen):

Wenn Sie wirklich aufs Ganze gehen wollen und die Leistung ein Haupt können Sie das Disrupter-Framework verwenden (nichts für Zartbesaitete):

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X