2021年3月30日火曜日

Javaスレッドセーフ

Javaのプログラムはマルチスレッドで実行できる。特にServletやJSPなどはマルチスレッドで動かすことが前提なので、マルチスレッドで実行しても問題が発生しない様にスレッドセーフを意識してコーディングする必要がある。

例えば、Webアプリケーションでユーザー情報をスレッドセーフで無い変数に格納しているプログラムがあった場合、タイミングによって他のユーザーの情報が自分の画面に表示されたりといった重大な不具合を混入させてしまう恐れがあり、さらに単体テストでは気づき難い。


インスタンス変数はメソッドの外に定義された変数、クラス変数はインスタンス変数にstaticを付加した変数で、いずれも並行実行した場合、他の実行スレッドから参照される可能性がある。

下記のコードでは、ローカル変数だけがスレッドセーフ。


public class Sample01 {

	private String str01;           //インスタンス変数
	
	private static String str02;    //クラス変数
	
	public static void main(String[] args) {

		String str03;             //ローカル変数
				
	}

}

ちょっと紛らわしいのですが、下記compはstaticメソッドですが、スレッドセーフです。なぜかというと、インスタンス変数、クラス変数いずれも使用していない為です。

public class Sample01 {

	public static int comp(int arg0) {

		return arg0++;
				
	}

}

0 件のコメント:

コメントを投稿

適格請求書等保存方式(インボイス制度)と消費税の端数処理

消費税の税額計算は 売上税額-仕入れ税額=納税額 2023年10月以降、この納税額の計算の元になる請求書は適格請求書(インボイス)の保存が必要となる。 2019年10月から消費税が10%に引き上げられる際に、日用品等は8%に据え置かれ複数税率を扱う事業者が発生する。 この軽減税率...