現在、Java を使用してマルチスレッド プログラムをプログラミングしています。いくつかの時点で、さまざまなスレッドがアクションをログに記録し、私はnanoTime
これを使用しています。すべてのスレッドには独自のログ ファイルがあり、最後にそれらをマージし、時間 ( ) に基づいて並べ替えて、nanoTime
何が起こったかを確認します。問題は、次のような誤った動作をしているということx
ですvolatile
。変数は次のとおりです。
// logged by thead1
x = true // done at time 0000, time computed & logged after x = true was done
// no events in between
// logged by thread2
read x // reads false while time before reading is 0001
nanoTime
そのため、実際には物事のタイミングが正しくないように思えます。nanoTime
ドキュメントには次のように書かれています。
このメソッドによって返される値は、Java 仮想マシンの同じインスタンス内で取得された 2 つのそのような値の差が計算された場合にのみ意味があります。
同じプロセスによって作成されたスレッドが異なる JVM で実行される可能性はありますか? これは の誤った動作を説明しますがnanoTime
、それでもあまり意味がありません。何か案は?