【Java SE 11 Silver対策】スレッドセーフとは
スレッドセーフ・・・聞いたこともないです。
いや、JavaのBroze取得した時に聞いたような・・・
というわけで今回も調べてみました。
まずはプロセスとスレッドについて復習
・プロセス
アプリケーションが起動する際に、割り当てられたメモリ空間
マルチプロセスでは、プロセス(アプリケーション)を複数同時に起動し、OSが交互にプロセスを切り替えながら実行する。
・スレッド
プロセス内で実行される一連の処理
マルチスレッドでは、1つのプロセス内で複数のスレッドを切り替えながら実行する
Javaはシングルプロセス、マルチスレッド
復習はここまで・・・
プロセス間ではメモリ空間は共有されないが、スレッド間ではメモリ空間が共有される。
マルチスレッドのJavaでは、異なるスレッドで同じデータへアクセスができてしまう。
へー
ローカル変数はスレッドセーフな変数
スレッド毎にある「スタック領域」 にデータを持つので、異なるスレッドからはアクセスできない
インスタンス変数(フィールド)や、クラス変数(static変数)はスレッドセーフでない変数
各スレッドで共有される「ヒープ領域」にデータを持つので、異なるスレッドからアクセスできる
ふむふむ
で、試験ではとりあえず「ArrayListはスレッドセーフではないコレクション」と覚えておけばよいみたい
・
・
・
この辺りちゃんと意識して今まで実装しましたか言われると、冷や汗がでますが、今回の調査が今後に活かせればよし!