Javaでvolatileキーワードはどのように使いますか。
Javaにおいて、volatileキーワードは変数を修飾するために使用され、多重スレッド環境での変数の可視性と順序性を保証するために使用されます。変数がvolatileと宣言されると、各スレッドはその変数の最新値をメインメモリから読み取りますが、スレッドのローカルキャッシュからではありません。これにより、スレッド間のデータの不整合性を回避できます。
volatileキーワードを使用する方法は次の通りです:
public class VolatileExample {
private volatile boolean flag = false;
public void setFlag() {
flag = true;
}
public boolean getFlag() {
return flag;
}
public static void main(String[] args) {
VolatileExample example = new VolatileExample();
new Thread(() -> {
example.setFlag();
System.out.println("Flag is set to true");
}).start();
while (!example.getFlag()) {
// Do nothing until flag is set to true
}
System.out.println("Flag is now true");
}
}
上記の例では、フラグ変数がvolatileとして宣言されており、マルチスレッド環境での可視性が確保されています。メインスレッドでは、getFlagメソッドを呼び出してフラグの値を判断し、falseの場合はフラグがtrueに設定されるまでループを続けます。別のスレッドでは、setFlagメソッドを呼び出してフラグをtrueに設定します。これにより、メインスレッドで取得されるフラグの値が最新であり、スレッド間の操作が順番通りに行われることが保証されます。