Ich habe Java Concurrency in Practice von Brian Goetz gelesen und im Abschnitt Stack Confinement wird erwähnt, dass jeder Thread seinen eigenen Stack erhält und daher lokale Variablen an sich auf den ausführenden Thread beschränkt sind. Sie befinden sich auf dem Stapel der ausführenden Threads, auf den andere Threads nicht zugreifen können. Was bedeutet er, dass jeder Thread seinen eigenen Ausführungsstapel hat?
10
Antworten:
Sie wissen, wann Sie aus irgendeinem Grund zum Debugger wechseln und die IDE Ihnen einen Stack-Trace gibt? Und jede Methode (Stapelrahmen) hat ihre eigenen lokalen Variablen, die Sie im Debugger untersuchen können?
Das ist der "Ausführungsstapel" Ihres Programms. Es zeigt, wie der lokale Status Ihres Programms im Moment aussieht. Was der Autor sagt, ist, dass jeder Thread so einen eigenen Ausführungsstapel bekommt. Es hat einen eigenen Aufrufstapel und jede der Methoden hat ihre eigenen lokalen Variablen.
Da die Variablen als Teil des Ausführungsstapels und nicht im Heap gespeichert werden, sind sie für den ausgeführten Thread eindeutig und können nicht direkt freigegeben werden. Sie können sie jedoch kopieren oder Verweise auf Objekte auf verschiedene Weise an andere Threads übergeben. Dies ist also meistens eine akademische Unterscheidung.
quelle