今まで避けてきたワードなのですが、
そうも行かなくなりそうなので質問させてください。
シングルスレッド、マルチスレッド、スレッドローカル、シングルトン、プロトタイプなどのキーワードで検索してみたのですがいまいち理解できません。
以下の認識で合っているか教えて下さい。
前提はspringframeworkを使用したWebアプリです。
・シングルトン
システムで1インスタンスを使い回す。
つまり、アプリが起動して最初にインスタンス生成されたものをずっと使い回す。当たり前だがリクエストごとの状態を持たせてはいけない。
・シングルスレッド
一つのスレッドで全ての処理が行われる実行環境。
一つのインスタンスに同時にアクセスされることがないため安全だが効率が悪い。
(リクエストの概念がないバッチアプリは一回実行されるだけなのでシングルスレッド?)
・マルチスレッド
複数のリクエストを同時に処理する実行環境。
現在のJavaプログラムはこれ?
スレッドローカルでないクラス変数は全て同時にアクセスされる可能性があるので、リクエストごとの状態を持つインスタンスはクラス変数にしてはいけない(必ずメソッド内で定義&インスタンス生成)。
・スレッドローカル
threadLocalを使用して作成したクラス変数のこと。
シングルトンならシステムで1インスタンスだが、スレッドローカルはスレッド(≒リクエスト?)ごとに1インスタンスだから、例えば、
多くのメソッドで必要になる変数だがメソッドの引数に毎回同じ指定なんてしたくない場合に便利。
・スレッドセーフ
マルチスレッド環境でも同時に処理されることがないクラス変数。以下のようにしてsynchronizedで囲むだけ。排他がかかるのでパフォーマンスは落ちる。
synchronized(変数){
//指定した変数に対して行う処理。
//この中に書いた処理は全て終了するまで排他制御がかかる。
}
これらについて認識合っているか教えて欲しいです。
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/13 02:01