jvmの起動単位とスレッドセーフ

JAVAについて頭を整理しておく。

jvmの起動単位について

  • javaコマンドを実行する毎にjvm起動
  • tomcat等のWEBアプリケーションコンテナも、1つのjvmで動作する1つのjavaアプリケーションに過ぎない
    • デプロイされたWEBアプリケーションは、あくまでコンテナから呼び出される1Javaオブジェクトであり、javaコマンドで別途起動されるアプリケーションではない
    • リクエスト単位でthreadを生成してリアルタイム性を実現(⇒マルチスレッド⇒スレッドセーフを意識する必要あり)

スレッドセーフ

以下のいずれかの条件を満たす場合、スレッドセーフと言えそうだ。

  • 状態をもたない
  • 状態が不変である
  • 排他制御(排他ロックやスレッドローカル化)がなされている