我有一个有8个线程的线程池
private static final ExecutorService SERVICE = Executors.newFixedThreadPool(8);
我的机制模拟100个用户(100个任务)的工作:
List<Callable<Boolean>> callableTasks = new ArrayList<>();
for (int i = 0; i < 100; i++) { // Number of users == 100
callableTasks.add(new Task(client));
}
SERVICE.invokeAll(callableTasks);
SERVICE.shutdown();
用户执行生成文档的任务.
- 获取任务的UUID;
- 每10秒获取一次任务状态;
- 如果任务已准备就绪,请获取文档.
public class Task implements Callable<Boolean> {
private final ReportClient client;
public Task(ReportClient client) {
this.client = client;
}
@Override
public Boolean call() {
final var uuid = client.createDocument(documentId);
GetStatusResponse status = null;
do {
try {
Thread.sleep(10000); // This stop current thread, but not a Task!!!!
} catch (InterruptedException e) {
return Boolean.FALSE;
}
status = client.getStatus(uuid);
} while (Status.PENDING.equals(status.status()));
final var document = client.getReport(uuid);
return Boolean.TRUE;
}
}
我想给另一个任务留出空闲时间(10秒).但是,当调用命令Thread.sleep(10000);时,当前线程将暂停其执行.前8个任务暂停,92个任务等待10秒.如何同时完成Thread.sleep(10000);项正在进行的任务?