Es gibt auch atomics. Dies ermöglicht den Zugriff auf den grundlegenden Hardware-Befehl "compare-and-swap", der die Grundlage für die gesamte Synchronisierung ist. So können Sie beispielsweise eine Nummer sicher erhöhen. Wenn Sie ein flüchtiges Feld ++
ein anderes Thread, das dieselbe Anweisung ausführt, könnte das Feld lesen, bevor Ihr Thread schreibt, dann schreiben Sie zurück nach Ihr Thread. Also ein Inkrement geht verloren. Atomics lesen und schreiben "atomisch" und vermeiden so das Problem.
Eigentlich flüchtige Bestandteile, Synchronized Aussagen, und atomics neigen alle Thread-Daten zu zwingen, aus dem Hauptspeicher und/oder geschrieben in dem Hauptspeicher entsprechend aufgefrischt werden, so dass keiner von ihnen sind tatsächlich dass niedrige Pegel. (Ich vereinfache hier. Im Gegensatz zu C#, Java hat nicht wirklich ein Konzept von "Hauptspeicher".)
ich denke, für Frage 1, können wir ReentrantLock und Condition-Objekte ,, sie sind eine Art von Konstrukten der unteren Ebene. – Addict