通威测试视觉相关逻辑
parent
818bf0a376
commit
413669db08
@ -0,0 +1,125 @@
|
||||
package com.zhehekeji.web.service.Queue;
|
||||
|
||||
import com.zhehekeji.common.util.SpringContextUtil;
|
||||
import com.zhehekeji.web.lib.CameraControlModule;
|
||||
import com.zhehekeji.web.lib.CameraDelayTask;
|
||||
import com.zhehekeji.web.lib.TaskDelayExecutor;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.concurrent.*;
|
||||
|
||||
public class SingleThreadQueueWithTimeout {
|
||||
|
||||
private static ExecutorService exec = Executors.newFixedThreadPool(1);
|
||||
class Task implements Delayed{
|
||||
|
||||
@Override
|
||||
public long getDelay(TimeUnit unit) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Delayed o) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
private static DelayQueue<CameraDelayTask> queue = new DelayQueue<>();
|
||||
|
||||
public static void addMp4DelayTask(Integer cameraId, String path, LocalDateTime startTime, LocalDateTime endTime, Long delayTime) {
|
||||
CameraDelayTask cameraDelayTask = new CameraDelayTask(cameraId, startTime, endTime,path, 0,delayTime);
|
||||
queue.add(cameraDelayTask);
|
||||
}
|
||||
|
||||
public static void addPicDelayTask(Integer cameraId, String path, Long delayTime) {
|
||||
CameraDelayTask cameraDelayTask = new CameraDelayTask(cameraId, null, null,path, 1,delayTime);
|
||||
queue.add(cameraDelayTask);
|
||||
}
|
||||
|
||||
public static void addGyrateCameraTask(Integer cameraId, Long delayTime,Integer ptzId){
|
||||
CameraDelayTask cameraDelayTask = new CameraDelayTask(cameraId, null, null,null, 2,delayTime);
|
||||
cameraDelayTask.setPtzId(ptzId);
|
||||
queue.add(cameraDelayTask);
|
||||
}
|
||||
|
||||
public static void runMp4DownloadExecutor(){
|
||||
exec.execute(new SingleThreadQueueWithTimeout.Consumer());
|
||||
}
|
||||
|
||||
private static class Consumer implements Runnable {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
while (true) {
|
||||
try {
|
||||
CameraControlModule cameraControlModule = SpringContextUtil.getBean(CameraControlModule.class);
|
||||
CameraDelayTask cameraDelayTask = queue.take();
|
||||
if(cameraDelayTask != null){
|
||||
|
||||
if(cameraDelayTask.getType() == 0){
|
||||
|
||||
cameraControlModule.downloadMp4(cameraDelayTask.getCameraId(), cameraDelayTask.getPath(), cameraDelayTask.getStartTime(), cameraDelayTask.getEndTime());
|
||||
}else if(cameraDelayTask.getType() == 1){
|
||||
cameraControlModule.pic(cameraDelayTask.getCameraId(),0, cameraDelayTask.getPath());
|
||||
}else if(cameraDelayTask.getType() == 2){
|
||||
cameraControlModule.toPtz(cameraDelayTask.getPtzId(),cameraDelayTask.getCameraId());
|
||||
}
|
||||
}
|
||||
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
// 创建一个单线程的 ExecutorService
|
||||
ExecutorService executorService = Executors.newSingleThreadExecutor();
|
||||
|
||||
// 创建一个 LinkedBlockingQueue 来存储任务
|
||||
BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();
|
||||
|
||||
// 添加任务到队列
|
||||
queue.add(() -> {
|
||||
System.out.println("任务 1 开始执行");
|
||||
try {
|
||||
Thread.sleep(2000); // 模拟任务执行时间
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
System.out.println("任务 1 被中断");
|
||||
}
|
||||
System.out.println("任务 1 执行结束");
|
||||
});
|
||||
|
||||
queue.add(() -> {
|
||||
System.out.println("任务 2 开始执行");
|
||||
try {
|
||||
Thread.sleep(1000); // 模拟任务执行时间
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
System.out.println("任务 2 被中断");
|
||||
}
|
||||
System.out.println("任务 2 执行结束");
|
||||
});
|
||||
|
||||
// 提交任务并设置超时处理
|
||||
Future<?> future1 = executorService.submit(queue.poll());
|
||||
Future<?> future2 = executorService.submit(queue.poll());
|
||||
|
||||
try {
|
||||
// 设置超时时间
|
||||
future1.get(3000, TimeUnit.MILLISECONDS);
|
||||
future2.get(2000, TimeUnit.MILLISECONDS);
|
||||
} catch (TimeoutException e) {
|
||||
System.out.println("任务超时");
|
||||
future1.cancel(true); // 取消任务
|
||||
future2.cancel(true); // 取消任务
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
executorService.shutdown(); // 关闭 ExecutorService
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue