| | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.concurrent.ExecutorService; |
| | | import java.util.concurrent.Executors; |
| | | import java.util.concurrent.Future; |
| | | import java.util.concurrent.atomic.AtomicBoolean; |
| | | import java.util.concurrent.locks.Lock; |
| | | import java.util.concurrent.locks.ReentrantLock; |
| | |
| | | /** |
| | | * 同步系统所需要的股票 |
| | | */ |
| | | @Scheduled(cron = "0/5 * * * * ?") |
| | | @Scheduled(cron = "0 0/1 * * * ?") |
| | | public void syncINStockData() { |
| | | if (syncINStockData.get()) { // 判断任务是否在处理中 |
| | | return; |
| | | } |
| | | if (syncINStockDataLock.tryLock()) { |
| | | ExecutorService executor = Executors.newFixedThreadPool(2); |
| | | Future<?> usFuture = null; |
| | | Future<?> mxFuture = null; |
| | | try { |
| | | syncINStockData.set(true); // 设置处理中标识为true |
| | | loadAllStock(EStockType.IN); |
| | | |
| | | // 并行执行US和MX的股票数据加载 |
| | | usFuture = executor.submit(() -> loadAllStock(EStockType.US)); |
| | | mxFuture = executor.submit(() -> loadAllStock(EStockType.MX)); |
| | | |
| | | // 等待两个任务都完成 |
| | | usFuture.get(); |
| | | mxFuture.get(); |
| | | } catch (Exception e) { |
| | | Thread.currentThread().interrupt(); |
| | | log.error("同步股票数据出错", e); |
| | | } finally { |
| | | // 关闭线程池 |
| | | if (executor != null) { |
| | | executor.shutdown(); |
| | | } |
| | | syncINStockDataLock.unlock(); |
| | | syncINStockData.set(false); // 设置处理中标识为false |
| | | } |