Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

JavaのWebアプリでのマルチスレッドについて

スポンサードリンク


最初にお断りしますが、Struts 1.x系限定のお話です。
JavaでWebアプリでマルチスレッドやらスレッドセーフなどという言葉を初めて聞いたとき、
やべぇ、JavaのWebアプリって難しそう。
スレッドセーフを常に意識してコーディングして
必要なところはクリティカルセクションにして
セマフォやらミューテックスを使うのか(゚Д゚;)
とか妄想していました*1が、どうもそうじゃない様子……。
というのがほとんど経験のないJavaで
しかも初めてのWebアプリケーションに取り掛かった時の話でした。
しかし、何ら難しいことではありません。
フツーに書く分にはほぼすべての部分でほとんど気にしなくてよいです。
作り方にもよるんでしょうが。
なお、以下に話すのはあくまで、今では化石となったStruts 1.x系についてです。
StrutsのActionクラスはSingletonになっています。
HTTPリクエストを受けるとこのアクションクラスは要求ごとにスレッドで起動されます。
インスタンスが毎回つくられるわけではありません。
ということはインスタンス変数にあるものがまずくなります(特にユーザ定義のクラス)。
他のスレッドと変数を共有することになります。
そんなわけでStruts 1.x系のプログラムではユーザ定義のクラスをインスタンス変数として
アクションクラスには持たないようにコーディングし、
関数(メソッド)内のローカルに持たせます。
そうすると、スタック領域に確保され、
スレッドごとに割り当てられるためスレッドセーフとなります。
ものすごく雑にいえばStruts 1.x系で気にすればいいのはこの程度です。

……というわけでマルチスレッド、スレッドセーフと聞いても
皆綱渡りのようなコーディングをしているわけではないので安心しましょう。

と、書いていていろいろググったら既にもの
すごく素晴らしくわかりやすい記事がありましたので、
JavaのWebアプリ初心者という方はここを参考にしてみてください。

*1:まぁJavaだとsynchronizedだけど