Die Freigabe eines Objekts zwischen zwei threads und Hauptprogramm
Ich bin neu in Java und bin an einer Concurrent Programming Kurs. Ich bin verzweifelt auf der Suche nach einem minimal-Beispiel, die helfen können, zeigen Konzepte, die ich gelernt habe, wie mit der 'synchronisiert' - Schlüsselwort und teilen sich ein Objekt auf mehrere threads.
Haben lange gesucht, konnten aber nicht einen grundlegenden Rahmen. Java-Programmierer, bitte helfen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Aufnahme Beispiel das teilen eines Arrays zwischen zwei threads. In der Regel sehen Sie alle Nullen, aber manchmal Dinge screwy und Sie sehen andere zahlen.
Aber, wenn Sie die Synchronisierung auf
arr
um die Schleife sehen Sie immer alle0
s in der print-out. Wenn Sie die Auskommentierung der synchronized-block, der code wird ohne Fehler ausgeführt.arr
nur für die Inkrement-und Dekrement-Linien: pastebin.com/vN4E527P Dies unterstreicht die Tatsache, dass der einzige thread-unsichere Teile sind diese beiden Linien.0
wie Sie sollten.Einem einfachen Beispiel. Hoffe, dass Sie wie Fußball (oder Fußball). 🙂
System.out.println
synchronisiert?ArrayList<String>
. Das ist, was ich dachte, war ursprünglich als ein gutes Beispiel (d.h., zwei threads aufrufen eines thread-unsichere Methode, die auf das gleiche Objekt ohne korrekte Synchronisation).--
und++
Operationen sind nicht atomar. Es könnte viele läuft dieses Programm zu sehen, das problem ist jedoch, da beide threads wäre die Iteration von 0 bis 400.000 im Gleichschritt. Ein Hinweis: Anstatt den aktuellen thread schlafen, Sie könnte mit dem aktuellen thread auf die beiden threads, die Sie gestartet.