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