リュックに何いれる?

一人暮らし・itエンジニア・読書

【Java SE 11 Silver対策】スレッドセーフとは

スレッドセーフ・・・聞いたこともないです。
いや、JavaのBroze取得した時に聞いたような・・・

 

というわけで今回も調べてみました。

まずはプロセスとスレッドについて復習
・プロセス
 アプリケーションが起動する際に、割り当てられたメモリ空間
 マルチプロセスでは、プロセス(アプリケーション)を複数同時に起動し、OSが交互にプロセスを切り替えながら実行する。
・スレッド
 プロセス内で実行される一連の処理
 マルチスレッドでは、1つのプロセス内で複数のスレッドを切り替えながら実行する

Javaはシングルプロセス、マルチスレッド

復習はここまで・・・


プロセス間ではメモリ空間は共有されないが、スレッド間ではメモリ空間が共有される。
マルチスレッドのJavaでは、異なるスレッドで同じデータへアクセスができてしまう。

へー

ローカル変数はスレッドセーフな変数
 スレッド毎にある「スタック領域」 にデータを持つので、異なるスレッドからはアクセスできない

インスタンス変数(フィールド)や、クラス変数(static変数)はスレッドセーフでない変数
 各スレッドで共有される「ヒープ領域」にデータを持つので、異なるスレッドからアクセスできる

ふむふむ

で、試験ではとりあえず「ArrayListはスレッドセーフではないコレクション」と覚えておけばよいみたい



この辺りちゃんと意識して今まで実装しましたか言われると、冷や汗がでますが、今回の調査が今後に活かせればよし!