Wie verwenden von shared memory bei Java-threads?
Ich die Umsetzung einer multi-threaded-Programm in Java, wo jede thread
ist eine Art class Node extends Thread
.
Alle diese Klassen erzeugen bestimmte Werte, die verwendet werden, die von anderen Klassen.
Für main
es ist einfach, um die Werte aus der generierten threads
, sondern aus dem inneren threads
sich, wie bekomme ich die Werte auf andere threads
?
//Start the threads from a list of objects
for (int i = 0; i < lnode.size(); i++) {
lnode.get(i).start();
}
Dank
- Alle threads in einem Prozess teilen sich alle Speicher standardmäßig, und kann den Zugriff auf diesen Speicher jederzeit.
- Bitte stoppen Sie diese schreckliche Praxis der Verlängerung Thread anstelle der Implementierung von Runnable.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie so etwas wie:
dann beide
t1
undt2
(zwei verschiedene threads der gleichen Art) werden mit der gleichen Liste, und sehen Sie änderungen, um es aus dem anderen thread.Tatsächlich, da bin ich nicht mit jeder synchronisation für die Kürze, es ist auch möglich, dies würde zu einer Beschädigung der Liste in gewisser Weise unberechenbar und verursachen komische Fehler. Ich ermutige Sie untersuchen den Prozess der synchronisation, und die
java.util.concurrent
Paket beim arbeiten mit der Gleichzeitigkeit.Wenn threads des gleichen Prozesses/jvc-Instanz, die Sie nicht brauchen, "shared memory", Sie müssen nur eine Referenz für die Daten in Ihren treads, zum Beispiel über den Konstruktor oder statischen Verweis.
Aber Sie müssen eine Synchronisierung /Steuerung-access-Mechanismus, wenn mehr als ein thread schreibt Daten.
Es klingt wie Sie sind auf der Suche für ein ConcurrentHashMap aber ohne ein wenig mehr detail ist es schwierig zu sagen.
Welche Art von Daten sind Sie in der Hoffnung zu teilen, der zwischen diesen threads und wie werden Sie brauchen, es zu teilen?
BTW - Es wird allgemein als besser zu implementieren
Runnable
als zu verlängernThread
.Können Sie ThreadLocal teilen Variablen. Die definition von ThreadLocal ist unten dargestellt :
Finden Sie weitere Informationen hier.