1

現在、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、それでもあまり意味がありません。何か案は?

4

2 に答える 2