1
単純なファイル書き込み操作を実行するRunnableがあり、このRunnableがExecutorとともに呼び出されたとします。シングルスレッドのExecutorのクラスであることExecutorでExecutorのRunnable内の変数
..
public void doThis() {
executor.execute(new Runnable() {
@Override
public void run() {
file.write(_data);
}
});
}
はモーメントが実行保存されます_Dataの即時内容は()と呼ばれているのでしょうか?つまり、実行可能ファイルがキューに登録されると、_dataに変更を加えることができ、その変更はファイルに書き込まれません。
_data = something
doThis();
_data = something else
私はfile.write(他の何か)を行うことになるでしょうか?
この問題は、_dataに多くの変更が加えられ、新しい_dataですぐにexecute()を呼び出すことになります。この場合、私は唯一の選択は、何らかのデータ構造_dataを実装することだと思うので、execute()は常に_data []で動作します。 –
類似の質問が掲載されています(http://stackoverflow.com/questions/8147015/executor-execute-jmm-guarantee)。ここでは、メモリの一貫性と、メモリの一貫性の影響について説明しました。エグゼキュータにRunnableオブジェクトを送信すると、実行が開始される前に、おそらく別のスレッドで実行されます。 私は同じロジックで、_data =何かがdoThis()の前に起こらないことを期待していました。しかし、私は、「スレッドの前に起こっている動作」が何を意味するかについてはあまりよく分かりません。それでも可能でしょうか? –