public Task(final String name, final long time, final Runnable runnable,
final Consumer<Task> afterRun,
final Consumer<Task> afterCancel) {
this.time = time;
this.name = name;
this.runnable = runnable;
this.afterRun = afterRun;
this.afterCancel = afterCancel;
this.slot = null;
this.next = null;
this.pre = null;
this.createTime = System.currentTimeMillis();
this.expirationTime = this.createTime + this.time;
}
public void run() {
if (STATE_UPDATER.compareAndSet(this, INIT, EXPIRED)) {
//runnable.run();
long executeTime = System.currentTimeMillis();
long delayTime = executeTime - this.createTime;
StringBuilder builder = new StringBuilder();
builder.append("=============执行:" + name + "\n");
builder.append(" 任务生成时间:" + this.createTime + "\n");
builder.append(" 预期执行时间:" + expirationTime + "\n");
builder.append(" 实际执行时间:" + executeTime + "\n");
builder.append(" 实际延迟时间:" + delayTime + "\n");
System.out.println(builder);
if (afterRun != null) {
afterRun.accept(this);
}
}
}
public static void main(String[] args) {
Timer timer = new Timer(100L, 10, 100);
Timer.Task task;
task = new Timer.Task("50毫秒任务",50, () -> {}, o -> {}, o -> {});
timer.add(task);
task = new Timer.Task( "110毫秒任务",110, () -> {}, o -> {}, o -> {});
timer.add(task);
task = new Timer.Task( "120毫秒任务",120, () -> {}, o -> {}, o -> {});
timer.add(task);
task = new Timer.Task( "130毫秒任务",130, () -> {}, o -> {}, o -> {});
timer.add(task);
task = new Timer.Task( "230毫秒任务",230, () -> {}, o -> {}, o -> {});
timer.add(task);
task = new Timer.Task( "240毫秒任务",240, () -> {}, o -> {}, o -> {});
timer.add(task);
task = new Timer.Task( "260毫秒任务",260, () -> {}, o -> {}, o -> {});
timer.add(task);
task = new Timer.Task( "1500毫秒任务", 1500, () -> {}, o -> {}, o -> {});
timer.add(task);
task = new Timer.Task( "3000毫秒任务", 3000, () -> {}, o -> {}, o -> {});
timer.add(task);
task = new Timer.Task( "10000毫秒任务", 10000, () -> {}, o -> {}, o -> {});
timer.add(task);
task = new Timer.Task( "60000毫秒任务", 60000, () -> {}, o -> {}, o -> {});
timer.add(task);
}
=============执行:50毫秒任务
任务生成时间:1636949674442
预期执行时间:1636949674492
实际执行时间:1636949674555
实际延迟时间:113
=============执行:230毫秒任务
任务生成时间:1636949674445
预期执行时间:1636949674675
实际执行时间:1636949674555
实际延迟时间:110
=============执行:240毫秒任务
任务生成时间:1636949674446
预期执行时间:1636949674686
实际执行时间:1636949674555
实际延迟时间:109
=============执行:130毫秒任务
任务生成时间:1636949674445
预期执行时间:1636949674575
实际执行时间:1636949674555
实际延迟时间:110
=============执行:110毫秒任务
任务生成时间:1636949674443
预期执行时间:1636949674553
实际执行时间:1636949674555
实际延迟时间:112
=============执行:120毫秒任务
任务生成时间:1636949674444
预期执行时间:1636949674564
实际执行时间:1636949674555
实际延迟时间:111
=============执行:10000毫秒任务
任务生成时间:1636949674449
预期执行时间:1636949684449
实际执行时间:1636949674556
实际延迟时间:107
=============执行:3000毫秒任务
任务生成时间:1636949674448
预期执行时间:1636949677448
实际执行时间:1636949674555
实际延迟时间:107
=============执行:1500毫秒任务
任务生成时间:1636949674447
预期执行时间:1636949675947
实际执行时间:1636949674555
实际延迟时间:108
=============执行:260毫秒任务
任务生成时间:1636949674447
预期执行时间:1636949674707
实际执行时间:1636949674555
实际延迟时间:108
=============执行:60000毫秒任务
任务生成时间:1636949674449
预期执行时间:1636949734449
实际执行时间:1636949674556
实际延迟时间:107