web-dev-qa-db-ja.com

概念的には、各スレッドが独自のスタックを取得すると言われているのはどういう意味ですか?

私は Brian GoetzによるJava Concurrency in Practice を読んでいて、セクションStack Confinement内では、各スレッドがその独自のスタックなので、ローカル変数は本質的に実行中のスレッドに限定されます。それらは、他のスレッドからアクセスできない実行中のスレッドスタックに存在します。各スレッドが独自の実行スタックを持っているとはどういう意味ですか?

10
Geek

何らかの理由でデバッガーにアクセスすると、IDEがスタックトレースを提供しますか?また、各メソッド(スタックフレーム)には、ローカル変数のセットがあり、デバッガ?

それがプログラムの「実行スタック」です。これは、現在のプログラムのローカルの状態を示しています。著者が言っているのは、各スレッドがそのような独自の実行スタックを取得するということです。独自の呼び出しスタックがあり、各メソッドには独自のローカル変数があります。

変数はヒープではなく実行スタックの一部として格納されるため、実行中のスレッドに固有であり、直接共有することはできません。それらをコピーしたり、オブジェクトへの参照をさまざまな方法で他のスレッドに渡したりすることができます。

13
Mason Wheeler