質問: いつもお世話になっております。 ちょっと表題の件でわからないことがあったので皆様のお知恵を貸していただければと思います。 よろしくお願いします。 まず、クラスメソッド(static)があったとして メモリ上はJVMのヒープに置かれると思うのですが、 そのクラスメソッドを同一プロセスの複数スレッドから同時実行した場合にはそれぞれのスレッドのメモリ上のスタックに積まれると思っています。 ※クラスメソッド自体はJVM上で静的に割り当てられますよね? 1プロセス内において複数スレッドからのクラスメソッドの同期を取るにはやはりmutex機構(synchronized)を使うしかないのでしょうか? 何が知りたいかと言うと良くシングルトンのデザインパターンに置いて1インスタンスを使いまわすと思うのですが 仮に自身を返すメソッド(getInstanceとします)を複数から呼んだ場合に1スレッドからは既に生成された自身を返す場合と1スレッドからは自身が削除(別インスタンスとして生成など)されている可能性があるってことですよね? ※インスタンスとしては1インスタンスだけど同一インスタンスでは無くなっている
回答: 補足です。 synchronizedを使うのはsingleton参照変数に対してです。 Java1.6からはConcurrentの仕組みがかなり入っていると思いますがそれと同じ仕組みを保証してやりたいのです。