14
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

スレッドセーフってなに(with Java)

Posted at

単語の意味

  • マルチスレッドプログラミングにおける概念。
  • マルチスレッドで動作させても問題のないプログラムのこと。
  • コードを複数のスレッドが同時並行的に実行しても問題が発生しないこと。

ある共有データへの複数のスレッドによるアクセスがあるとき、一度に1つのスレッドのみがその共有データにアクセスするようにして安全性を確保しなければならない。

複数人が同時に使用することが前提のアプリケーションではスレッドセーフにしておかないと、「AさんがAさんしか見れてはいけないデータをBさんが意図せず取得してしまう」ような状態になってしまいます。

じゃあどうするか

  • Javaの場合は、クラス変数・インスタンス変数は使用せずローカル変数を使用しましょう。
  • ただし、staticに使用し変更のない定数はローカル変数以外でも問題ありません。

具体的に、内部でどうなっているか

ローカル変数は、Javaスタック領域というメモリ領域に保持されるため、ひとつのスレッドからしかアクセスされません。
つまり、スレッドにより異なるメモリ領域に保持されており、他のスレッドから参照されたり書き換えられることがないのです。
ちなみに、クラス変数・インスタンス変数は、ヒープ領域というメモリ領域に保持され、その領域は複数のスレッドから参照されます。

注意

Javaプログラムではクラス変数・インスタンス変数を使用しなくても、意図せずJSPで使用してしまうことに気をつけましょう。

<%! int count = 0; %>

JSPは実行時にサーブレットへとコンパイルされますが、上記宣言はインスタンス変数として展開されます。

14
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?