サンプリングを行う Java メソッドがあります。つまり、次のようなことを行います。
TIME = 60 /* seconds */
startTime = now();
count = 0;
while (now() - startTime < TIME) {
sample = createRandomSample();
if (satisfiesSomeConditions(sample)) {
count++;
}
}
return count;
現在、通常、createRandomSample() と satisfiesSomeConditions(sample) は非常に高速 (1 秒以下) に実行されるため、このコードはうまく機能します。
ただし、これらの関数のいずれかの実行に時間がかかる場合があります。このサンプリング プロセスを制御して、TIME で要求された時間よりも長く実行しないようにするにはどうすればよいですか。たとえば、TIME よりも 10% 長く実行されてもかまいませんが、TIME よりも任意に長い時間実行したくありません。
ExecutorService は厳しすぎるようです。
別のスレッドでサンプリングを実行し、そのスレッドにサンプリングを停止して現在の結果を返すように穏やかに指示したいようなものです。