下面内运行的多个线程是使用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
的新实例。这是否会导致问题?