package org.example.task; import lombok.extern.slf4j.Slf4j; import org.example.server.impl.CurrencySerivceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @program: demo * @description: * @create: 2024-07-23 18:01 **/ @Component @Slf4j public class MarketDataTask { private final ExecutorService executor = Executors.newSingleThreadExecutor(); // 创建单线程线程池 @Autowired private CurrencySerivceImpl currencySerivce; private final Lock syncCurrencyLock = new ReentrantLock(); @Scheduled(initialDelay = 0, fixedRate = Long.MAX_VALUE) public void start() { log.info("行情数据计算-------------启动"); // 启动任务调度器 // currencySerivce.scheduler(); executor.execute(() -> { try { while (true) { syncCurrencyLock.lock(); try { long startTime = System.nanoTime(); currencySerivce.quotationCalculation(); long endTime = System.nanoTime(); double durationInSeconds = (endTime - startTime) / 1_000_000_000.0; if(durationInSeconds >= 2){ log.info("程序执行时间: " + durationInSeconds + " 秒"); } } catch (Exception e) { log.error("行情数据计算错误--------------【严重预警】"); e.printStackTrace(); } finally { syncCurrencyLock.unlock(); } } } catch (Exception e) { log.error("行情数据计算--------------线程被中断"); Thread.currentThread().interrupt(); } }); } }