@Slf4j
public class RunnableMaster {
private static final ExecutorService DEFAULT_EXECUTOR_SERVICE = Executors.newFixedThreadPool(16);
private final ExecutorService executorService;
private final AtomicInteger taskCounter = new AtomicInteger(0);
public RunnableMaster() {
this(DEFAULT_EXECUTOR_SERVICE);
}
public RunnableMaster(ExecutorService executorService) {
this.executorService = executorService;
}
public void submit(Runnable task) {
taskCounter.incrementAndGet();
executorService.submit(() -> {
try {
task.run();
} catch (Exception e) {
log.error("Task Execute Error ! taskOrder: {}, error:{}", e);
}
taskCounter.decrementAndGet();
});
}
public boolean await() {
while (true) {
if (taskCounter.get() == 0) {
return true;
}
}
}
}
使用
private ExecutorService executorService = Executors.newFixedThreadPool(8);
RunnableMaster runnableMaster = new RunnableMaster(executorService);
runnableMaster.submit(() -> monthOutput(monthIndicatorResp));
runnableMaster.await();