頭脳一式

人の記憶なんて曖昧なもの。すべての情報を頭に記憶するなんてナンセンス。困ったらここに来ればいいじゃん?というスタンスで最強のナレッジベースを目指すブログ

【Java】スレッドセーフな書き方を目指す(メモ)

  • ステートレスにする(クラス変数・インスタンス変数を使わずにローカル変数を用いる。)
  • 文字の連結にはStringBufferを使用する。(StringBuilderは使わない。)
  • 日付を操作する場合はLocalDateTimeクラスを使用する。(DataクラスやCalendarクラスを使わない。)
  • メソッドに変数を渡したい場合は、その都度渡す。
  • 定数等、static宣言するものはクラス変数やインスタンス変数でも可。
  • 同期化する必要がある処理にはsynchronizedを付与することを検討する。

ローカル変数の値はメモリ上スタック領域に保持されるため、1つのスレッドからしか参照されない。
一方、クラス変数・インスタンス変数はヒープ領域に保持されるため、複数のスレッドから参照されてしまう。