diff --git a/src/main/java/net/tccn/timer/TimerExecutor.java b/src/main/java/net/tccn/timer/TimerExecutor.java index 1ee0ae8..720ddf5 100644 --- a/src/main/java/net/tccn/timer/TimerExecutor.java +++ b/src/main/java/net/tccn/timer/TimerExecutor.java @@ -61,6 +61,6 @@ public class TimerExecutor { e.printStackTrace(); } } - }).start(); + }, "Thread-Redtimer-0").start(); } } \ No newline at end of file diff --git a/src/main/java/net/tccn/timer/queue/TimerQueue.java b/src/main/java/net/tccn/timer/queue/TimerQueue.java index 89a7204..cc189fd 100644 --- a/src/main/java/net/tccn/timer/queue/TimerQueue.java +++ b/src/main/java/net/tccn/timer/queue/TimerQueue.java @@ -2,8 +2,8 @@ package net.tccn.timer.queue; import net.tccn.timer.task.Task; -import java.util.Arrays; import java.util.HashSet; +import java.util.LinkedList; import java.util.Set; /** @@ -11,9 +11,8 @@ import java.util.Set; */ public class TimerQueue { Object lock = new Object(); - Task[] queue = new Task[128]; + LinkedList queue = new LinkedList(); Set names = new HashSet<>(); - int size = 0; /** * 新加调度任务 @@ -23,20 +22,14 @@ public class TimerQueue { public void push(Task task) { synchronized (lock) { remove(task.getName()); - int inx = size;//目标坐标 - while (inx > 0 && queue[inx - 1].theTime() > task.theTime()) { + int inx = queue.size();//目标坐标 + while (inx > 0 && queue.get(inx).theTime() > task.theTime()) { inx--; } - if (queue.length == size + 1) - queue = Arrays.copyOf(queue, size * 2); + queue.add(inx, task); - for (int i = size + 1; i > inx; i--) { - queue[i] = queue[i - 1]; - } - queue[inx] = task; - - size++; + //size++; names.add(task.getName()); lock.notify(); } @@ -50,19 +43,15 @@ public class TimerQueue { */ public Task take() throws InterruptedException { synchronized (lock) { - while (size == 0) lock.wait(10);//循环避免非put线程唤醒空异常 + while (queue.size() == 0) { + lock.wait(10);//循环避免非put线程唤醒空异常 + } long currentTime = System.currentTimeMillis(); - long nextTime = queue[0].theTime(); + long nextTime = queue.getFirst().theTime(); if (currentTime >= nextTime) { - Task task = queue[0]; - for (int i = 0; i < size; i++) { - queue[i] = queue[i + 1]; - } - queue[size - 1] = null; - size--; - return task; + return queue.removeFirst(); } else { lock.wait(nextTime - currentTime); return take(); @@ -92,23 +81,21 @@ public class TimerQueue { private Task get(String name, boolean remove) { synchronized (lock) { - if (!names.contains(name)) return null; + if (!names.contains(name)) { + return null; + } Task take = null; - for (int i = 0; i < size; i++) { - if (name.equals(queue[i].getName())) { - take = queue[i]; - if (!remove) break; - while (i < size + 1) { - queue[i] = queue[i + 1]; - queue[i + 1] = null; - i++; - } - names.remove(name); - size--; - break; + for (int i = 0; i < queue.size(); i++) { + if (name.equals(queue.get(i).getName())) { + take = queue.get(i); } } + if (remove && take != null) { + queue.remove(take); + names.remove(take.getName()); + } + lock.notify(); return take; }