Я читал Java Concurrency in Practice от Brian Goetz, и в разделе Confinement Stack упоминается, что каждый поток получает свой собственный стек, и поэтому локальные переменные внутренне ограничены исполняющим потоком; они существуют в стеке исполняющих потоков, который недоступен другим потокам. Что он имеет в виду, что каждый поток имеет свой собственный стек выполнения?
10
Ответы:
Вы знаете, когда по какой-то причине вы переходите к отладчику, и IDE дает вам трассировку стека? И каждый метод (стековый фрейм) имеет свой собственный набор локальных переменных, которые вы можете проверить в отладчике?
Это «стек выполнения» вашей программы. Он показывает, как выглядит локальное состояние вашей программы в данный момент. Автор говорит, что каждый поток получает свой собственный отдельный стек выполнения, подобный этому. Он имеет свой собственный стек вызовов, и каждый из методов имеет свои локальные переменные.
Поскольку переменные хранятся как часть стека выполнения, а не в куче, они уникальны для выполняемого потока и не могут использоваться напрямую. Однако вы можете копировать их или передавать ссылки на объекты в другие потоки различными способами, так что это в основном академическое различие.
источник