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