下面內運行的多個線程是使用ScheduledExecutorService的一個單元測試來執行調度運行的每一秒:從一個單元測試
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
public class ConcurrentRequestSimulator {
private static final int NUMBER_REQUESTS = 4;
@Test
public void testGetToDoList() {
try {
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(10);
scheduler.scheduleAtFixedRate(new RequestThreadInvoker(), 0, 1, TimeUnit.SECONDS);
} catch (Exception e) {
e.printStackTrace();
}
}
private final class RequestThreadInvoker implements Runnable {
public void run() {
ExecutorService es = Executors.newCachedThreadPool();
for (int i = 1; i <= NUMBER_REQUESTS; i++) {
es.execute(new RequestThread());
}
es.shutdown();
while (!es.isTerminated()) {
}
}
}
private final class RequestThread implements Runnable {
public void run() {
try {
System.out.println("in RequestThread");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
System.out.println("in RequestThread");
在RequestThread
沒有出現要被調用的行,沒有任何輸出控制檯。 我認爲問題是,由於測試運行到完成,它會導致scheduler
停止調度?是否可以更新測試,以便scheduler
未終止並且RequestThreadInvoker
每秒重複調用一次?
在RequestThreadInvoker
我創建了ExecutorService
的新實例。這是否會導致問題?