インターネットからファイルをダウンロードしている実行可能ファイルがあります。次のようになります。
class Downloader implements Runnable {
volatile Status status;
public void run() {
// ...
while (status.isInProgress()) { ... }
}
}
ステータスは次のようになります。
public enum Status {
PAUSED {
public int someData() { return 0; }
},
INPROGRESS {
public int someData() { return 1; }
}
public abstract int someData();
private String msg;
public String getSomeMsg() {
return msg;
}
public void setSomeMsg(String s) {
msg=s;
}
public boolean isInProgress() {
return this == INPROGRESS;
}
}
ユーザーが一時停止ボタンを押すと、ステータス変数が GUI スレッドから PAUSED に設定されます。
コードは Java 1.6 でコンパイルされ、Android プラットフォーム用にコンパイルされています。
私の質問は、これが Enum をこのように設定/読み取るのにスレッドセーフかどうかです。ここで素晴らしい記事を読みました:
http://javarevisited.blogspot.com/2011/06/volatile-keyword-java-example-tutorial.html
私はそれが保存されていることを確信していますが、列挙型についてはあまり語っていません。