Ich habe ein Programm läuft Multi-Thread, alle Thread-Freigabe und Prozess auf einzelne AtomicLong-Variable. Jeder von ihnen ruft zuerst die Methode auf, um den Wert abzurufen und weiter zu verarbeiten.Führt die getAndAdd-Methode in AtomicLong dazu, dass Threads warten?
Wenn alle Threads gleichzeitig ausgeführt werden, führt das Aufrufen der obigen Methode dazu, dass ein Thread wartet, bis ein anderer Thread den Wert erreicht hat.
(dh es zur Laufzeit von etwas effizienter, in der Regel eine einzige CPU-Befehl ersetzt wird) Sie sind Looping , Sie meinen, sie werden nichts tun, bis sie den Wert bekommen? Ich frage mich, hat es Auswirkungen auf die Leistung? –
Sie werden nichts tun, sie werden Schleife (busy-waiting), so dass sie 100% CPU verwenden. Aber das wird unter normalen Wettbewerbsbedingungen nicht lange dauern. Wenn Ihr Programm natürlich tausende von Threads hat, die nichts tun als "getAndAdd", werden Sie eine hohe CPU-Auslastung feststellen, aber das ist ein unrealistisches Szenario. – assylias
Siehe auch: http://stackoverflow.com/questions/2664172/java-concurrency-cas-vs-locking – assylias