Whileループがあり、しばらくしてから終了させたい。
例えば:
while(condition and 10 sec has not passed){
}
long startTime = System.currentTimeMillis(); //fetch starting time
while(false||(System.currentTimeMillis()-startTime)<10000)
{
// do something
}
したがって、ステートメント
(System.currentTimeMillis()-startTime)<10000
ループが開始されてから10秒または10,000ミリ秒であったかどうかを確認します。
[〜#〜] edit [〜#〜]
@Julienが指摘したように、whileループ内のコードブロックに多くの時間がかかる場合、これは失敗する可能性があります。したがって、 ExecutorService を使用するのが適切なオプションです。
最初にRunnableを実装する必要があります
class MyTask implements Runnable
{
public void run() {
// add your code here
}
}
その後、ExecutorServiceを次のように使用できます。
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.invokeAll(Arrays.asList(new MyTask()), 10, TimeUnit.SECONDS); // Timeout of 10 seconds.
executor.shutdown();
何かのようなもの:
long start_time = System.currentTimeMillis();
long wait_time = 10000;
long end_time = start_time + wait_time;
while (System.currentTimeMillis() < end_time) {
//..
}
トリックを行う必要があります。他の条件も必要な場合は、whileステートメントに追加するだけです。
これを使用しないでください
System.currentTimeMillis()-startTime
ホストマシンの時間変更でハングする可能性があります。この方法をよりよく使用します。
Integer i = 0;
try {
while (condition && i++ < 100) {
Thread.sleep(100);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
(100 * 100 = 10秒のタイムアウト)