ブロック アクションにかかる時間を監視するスレッドを作成しようとしています。たとえば、次のようなブロック アクションがあります。
class BlockingThread extends Thread{
public volatile boolean success = false;
public volatile long startedTime = 0;
public void run(){
startedTime = System.currentTimeMillis();
success = doBlockingAction(); //no idea how long this action will take
}
}
ブロックアクションに時間がかかりすぎる場合、基本的に「タイムアウト」関数を呼び出す別のスレッドが必要です。
class MonitorThread extends Thread{
public void run(){
while(System.currentTimeMillis() - blockingThread.startedTime > TIMEOUT_DURATION)
{
..keep waiting until the time runs out..
}
if(!blockingThread.success){
listener.timeout();
//Took too long.
}
}
}
MonitorThread で時間を測定しているときに、BlockingThread が現在実際にブロック アクションを実行していることを確認する方法がわかりません。
私がこのようなことをしたら、
Thread blockingThread = new BlockingThread();
blockingThread.start();
Thread monitorThread = new MonitorThread();
monitorThread.start();
スレッドの 1 つが実際に他のスレッドの前にコードの実行を開始するという保証はありません。したがって、現在、タイムアウト スレッドが実際にブロッキング アクションの時間を正しく測定しているかどうかを知る方法がありません。答えはロックとwait
イングに関係していると思いますが、わかりません。