マルチスレッド@Java

Javaではローカル変数のみ安心

マルチスレッドで動作するアプリでは
1つのプロセスで複数の利用者からのリクエストを同時に受け付けて処理する
いちいちプロセスを起動しない分
性能向上や効率的なCPU/メモリの使用に繋がる
マルチコアCPUであれば
複数のコアで各スレッドを同時実行できちゃう

JavaのServletやJSP(JavaServer Pages)がマルチスレッド動作を前提としている

Servletでは以下の3種類の変数を利用できる
・クラスで共用される「クラス変数」
・クラスから生成された個々のインスタンス(オブジェクト)で使用される「インスタンス変数」
・メソッド内やブロック内で使われる「ローカル変数」

3種類の変数のうち
スレッドセーフなのはローカル変数だけである
ローカル変数は
スレッド固有のメモリ領域である「Javaスタック」に保持されるため
1つのスレッドからしかアクセスされない
スレッド毎に固有の変数格納庫があることになり
他のスレッドに情報を書き換えられたり
他のスレッドが情報を取り違えて参照したりすることはない


ローカル変数以外は複数のスレッドから共有され得る
インスタンス変数やクラス変数は
共有メモリである「ヒープ領域」に格納されるため
複数のsレッドが共有する可能性がある
そのため参照/更新する時はロック(更新メソッドにsynchronized宣言する等)しない限り
スレッドセーフではない

JSPの場合
変数やメソッドの宣言に使われる<'%! %>タグが
Servletへのコンパイル字にインスタンス変数に展開される
そのため
Servletと同様にマルチスレッドの考慮が必要になる


ref:
[実装編]スレッドセーフにすることを忘れてはいけない
★★★★☆+α
http://itpro.nikkeibp.co.jp/article/COLUMN/20070820/279950/

tag : Java Multi Thread

2010-04-08 01:01 : __lang__java : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud