以下のテストクラスでは、「直前」が出力されます。
しかし、Thread.sleep を削除すると、以下が出力されます。
before
after
before
after
before
after
before
after
before
after
before
after
before
after
before
after
before
after
before
after
これは私が期待するものです。
Thread.sleep を使用する場合、各出力間に 1000ms の遅延が必要だと思います
before
after
これが発生しないのはなぜですか?スリープを呼び出すかどうかに関係なく、生成された出力が同じになるようにコードを修正するにはどうすればよいですか?
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import org.junit.Test;
public class RunExecutorTest {
private ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
private class RunTest implements Runnable {
public void run() {
System.out.println("before");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("after");
}
}
@Test
public void testRun() {
Runnable r = new RunTest();
for(int counter = 0; counter < 10; ++counter) {
executor.execute(r);
}
}
}
「@ user470184メインスレッドの完了時にJunitがすべてのスレッドを強制終了するため、junitテストケースでは機能しません。– Sotirios Delimanolis」の下のコメントを読んで更新してください。
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
テストメソッドの最後に、期待どおりに機能します。