From 03bde297923144d0b7561ca74957cb88193371fb Mon Sep 17 00:00:00 2001 From: lxyer <237809796@qq.com> Date: Sat, 11 Aug 2018 12:26:34 +0800 Subject: [PATCH] . --- README.md | 2 +- .../java/com/lxyer/timer/AbstractTask.java | 5 +++++ src/main/java/com/lxyer/timer/Task.java | 2 ++ .../java/com/lxyer/timer/TimerExecutor.java | 6 +++--- src/main/java/com/lxyer/timer/TimerQueue.java | 18 +++++++++--------- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 97f08a7..61efedc 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ redtimer是本人纯手工精心编写的一个任务定时调度器, 项目地址:[https://gitee.com/tc608/redtimer](https://gitee.com/tc608/redtimer) #### 软件架构 -里面的东西很简单,没什么架构而言 +![](http://img.1216.top/redbbs/20180811122309.png) #### 安装使用教程 diff --git a/src/main/java/com/lxyer/timer/AbstractTask.java b/src/main/java/com/lxyer/timer/AbstractTask.java index b35fbe7..faa6535 100644 --- a/src/main/java/com/lxyer/timer/AbstractTask.java +++ b/src/main/java/com/lxyer/timer/AbstractTask.java @@ -19,6 +19,11 @@ public abstract class AbstractTask implements Task { this.theTime = scheduled.theTime().toInstant(ZoneOffset.of("+8")).toEpochMilli(); } + @Override + public String getName() { + return name; + } + @Override public long nextTime(){ LocalDateTime next = scheduled.nextTime(); diff --git a/src/main/java/com/lxyer/timer/Task.java b/src/main/java/com/lxyer/timer/Task.java index fb627df..81b5936 100644 --- a/src/main/java/com/lxyer/timer/Task.java +++ b/src/main/java/com/lxyer/timer/Task.java @@ -5,6 +5,8 @@ package com.lxyer.timer; */ public interface Task extends Runnable{ + String getName(); long nextTime(); long theTime(); + void run(); } diff --git a/src/main/java/com/lxyer/timer/TimerExecutor.java b/src/main/java/com/lxyer/timer/TimerExecutor.java index 085574c..13ae446 100644 --- a/src/main/java/com/lxyer/timer/TimerExecutor.java +++ b/src/main/java/com/lxyer/timer/TimerExecutor.java @@ -14,10 +14,10 @@ public class TimerExecutor { executor = Executors.newFixedThreadPool(n); } - public void add(AbstractTask task){ + public void add(Task task){ queue.put(task); } - private void add(AbstractTask task, boolean upTime){ + private void add(Task task, boolean upTime){ if (upTime) task.nextTime(); queue.put(task); } @@ -27,7 +27,7 @@ public class TimerExecutor { new Thread(()->{ while (true){ try{ - AbstractTask take = null; + Task take = null; try { take = queue.take(); } catch (InterruptedException e) { diff --git a/src/main/java/com/lxyer/timer/TimerQueue.java b/src/main/java/com/lxyer/timer/TimerQueue.java index 11ba83d..fb55343 100644 --- a/src/main/java/com/lxyer/timer/TimerQueue.java +++ b/src/main/java/com/lxyer/timer/TimerQueue.java @@ -9,12 +9,12 @@ import java.util.Set; */ class TimerQueue{ Object lock = new Object(); - AbstractTask[] queue = new AbstractTask[128]; + Task[] queue = new Task[128]; Set names = new HashSet<>(); int size=0; - void put(AbstractTask task) { - remove(task.name); + void put(Task task) { + remove(task.getName()); synchronized (lock){ int inx = size;//目标坐标 while (inx > 0 && queue[inx-1].theTime() > task.theTime()){ @@ -31,12 +31,12 @@ class TimerQueue{ queue[inx] = task; size++; - names.add(task.name); + names.add(task.getName()); lock.notify(); } } - AbstractTask take() throws InterruptedException { + Task take() throws InterruptedException { synchronized (lock){ if (size == 0) lock.wait(); @@ -44,7 +44,7 @@ class TimerQueue{ long nextTime = queue[0].theTime(); if (currentTime >= nextTime){ - AbstractTask task = queue[0]; + Task task = queue[0]; for (int i = 0; i < size;i++) { queue[i] = queue[i+1]; } @@ -58,13 +58,13 @@ class TimerQueue{ } } - AbstractTask remove(String name){ + Task remove(String name){ synchronized (lock){ if(!names.contains(name)) return null; - AbstractTask take = null; + Task take = null; for (int i = 0; i < size-1; i++) { - if (name.equals(queue[i].name)){ + if (name.equals(queue[i].getName())){ take = queue[i]; while (i < size+1){ queue[i] = queue[i+1];