2

以下のテストクラスでは、「直前」が出力されます。

しかし、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();
}

テストメソッドの最後に、期待どおりに機能します。

4

1 に答える 1