@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();