| | |
| | | public void addTaskToQueue(String cameraId, GuideTask task) { |
| | | /*通过相机ID获取引导队列,并将引导任务加入队列*/ |
| | | PriorityBlockingQueue<GuideTask> guideTaskQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId); |
| | | if(StringUtils.isNull(guideTaskQueue)) |
| | | { |
| | | if (StringUtils.isNull(guideTaskQueue)) { |
| | | log.info("相机未登录,没有队列,无法入队引导"); |
| | | return; |
| | | } |
| | | log.debug("新任务入队:"+task.getAlarmId()); |
| | | log.debug("新任务入队:" + task.getAlarmId()); |
| | | guideTaskQueue.add(task); |
| | | /*获取该相机的当前执行线程*/ |
| | | TaskThread currentTaskThread = threadMap.get(cameraId); |
| | | //如果队列当前线程正在运行,若入队任务优先级大于当前任务优先级,则终止当前线程 |
| | | if (currentTaskThread != null && task.getPriority() > currentTaskThread.getCurrentTask().getPriority()) { |
| | | currentTaskThread.getThread().interrupt(); |
| | | if (currentTaskThread != null){ |
| | | if (task.getPriority() > currentTaskThread.getCurrentTask().getPriority()) { |
| | | currentTaskThread.getThread().interrupt(); |
| | | } |
| | | if (!currentTaskThread.getThread().isAlive()) { |
| | | Thread newThread = createThread(cameraId, guideTaskQueue); |
| | | threadMap.put(cameraId, new TaskThread(newThread, task)); |
| | | newThread.start(); |
| | | } |
| | | } |
| | | //如果队列当前没有线程正在运行,则启动新线程 |
| | | if (currentTaskThread == null || !currentTaskThread.getThread().isAlive()) { |
| | | else { |
| | | Thread newThread = createThread(cameraId, guideTaskQueue); |
| | | threadMap.put(cameraId, new TaskThread(newThread, task)); |
| | | newThread.start(); |
| | |
| | | while (!Thread.currentThread().isInterrupted()) { |
| | | try { |
| | | GuideTask task = queue.take(); |
| | | log.debug("取出队列数据:"+task.getAlarmId()); |
| | | log.debug("取出队列数据:" + task.getAlarmId()); |
| | | taskExecutor.processTask(task); |
| | | // 更新线程的当前任务 |
| | | TaskThread currentTaskThread = threadMap.get(queueName); |