package com.ycgh.util;
import static java.util.concurrent.TimeUnit.NANOSECONDS;
import static java.util.concurrent.TimeUnit.SECONDS;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Collections;
import java.util.Random;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class DelayedTasker implements Runnable{
DelayQueue<DelayedTask> queue = new DelayQueue<DelayedTask>();
public void addTask(DelayedTask e) {
queue.put(e);
}
public void removeTask() {
queue.poll();
}
public Collection<DelayedTask> getAllTasks() {
return Collections.unmodifiableCollection(queue);
}
public int getTaskQuantity() {
return queue.size();
}
public void run() {
while (!queue.isEmpty())
try {
queue.take().run();
} catch (InterruptedException e) {
System.out.println("Interrupted");
}
System.out.println("Finished DelayedTask");
}
public static class DelayedTask implements Delayed, Runnable {
private static int counter = 0;
private final int id = counter++;
private final int delta;
private final long trigger;
public DelayedTask(int delayInSeconds) {
delta = delayInSeconds;
trigger = System.nanoTime() + NANOSECONDS.convert(delta, SECONDS);
}
public long getDelay(TimeUnit unit) {
return unit.convert(trigger - System.nanoTime(), NANOSECONDS);
}
public int compareTo(Delayed arg) {
DelayedTask that = (DelayedTask) arg;
if (trigger < that.trigger)
return -1;
if (trigger > that.trigger)
return 1;
return 0;
}
public void run() {
//run all that you want to do
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String ly_time = sdf.format(new java.util.Date());
System.out.println(ly_time);
System.out.println(this);
}
public String toString() {
return "[" + delta + "s]" + "Task" + id;
}
}
public static void main(String[] args) {
Random rand = new Random();
ExecutorService exec = Executors.newCachedThreadPool();
DelayedTasker tasker = new DelayedTasker();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String ly_time = sdf.format(new java.util.Date());
System.out.println("现在时间是:"+ly_time);
for (int i = 0; i < 10; i++){
tasker.addTask(new DelayedTask(60));//延迟时间
}
exec.execute(tasker);
exec.shutdown();
}
}
分享到:
相关推荐
本文档 描述怎样定时 启动一个线程任务 并加了注释 希望对你有帮助
主要介绍了详解Java编程中线程同步以及定时启动线程的方法, 讲到了wait()与notify()方法以及阻塞队列等知识,需要的朋友可以参考下
spring定时任务 spring多线程的一个简单示例。
多线程 启动控制台 精确定时 WaitForSingleObject
VC++、文件保存。 所用到得知识点: 定时器,线程。
《MFC多线程的创建,包括工作线程和用户界面线程》全面讲解...发送消息的时候,也有发送线程消息函数 PostThreadMessage来执行线程之间的消息,线程有启动线程与挂起线程;定时器有启动定时器,sleep休眠,杀死定时器!
改代码支持线程的挂起和启动,可以多次挂起和启动。
定时启动任务线程,执行任务。通过设置calendar.add(Calendar.SECOND, 900);//15分钟 隔多少秒执行扫描一次
易语言定时闹钟源码,定时闹钟,界面绘画,时间开始计算,项目加入_时间,报时线程,时间报时,闹钟线程,时间闹钟,强制关闭计算机,无响应关机线程,时钟指针移动,画液晶时间,加入数组,计算时间转换,固定字段,取星期,APIBeep
9.添加定时任务之前请勿修改窗口句柄,进程ID,进程路径,进程名,线程ID。 10.慎重添加系统进程。 11.如果同时选中“任务全部完成后关闭程序”和“任务全部完成后关机”,会跳过“任务全部完成后关闭程序”,执行...
易语言-多线程定时关闭简单例子
java、杀死启动进程、定时执行程序、隐藏黑窗口(dos窗口)、线程异常死亡(保活):就是java自动重启JBOSS
通过多线程实现定时器,定时启动多线程,并且带有参数,threadtimer为定时器,main为主程序,可以按照间隔启动多线程
Android 定时联网更新天气或心情的例子,启动任务线程,关闭定时更新时间的任务线程,定时发送Intent更新时间,定时发送Intent更新心情内容,并给心情文本View添加监听器,防止切屏后widget不工作了,因为本例用不到...
MFC中利用多线程实现定时器,对于学习多线程和 ontimer的同学有用
dll提供对外设置接口,有启动线程、停止线程、设置关机时间和延迟时间。
c++简易定时任务引擎,原理简单,接口使用简单,通用。 支持指定任务执行次数。 包含使用示例。 启动定时器引擎Start(); 停止定时器引擎bool Stop(); 添加定时器( 不同的回调里面不用考虑dwTimerID重复的问题 )bool ...
在Global.asax启动一条线程就ok了,下面是启动线程定时写文件的例子.
写这个小程序的初衷,是因为一个我的WAP前端哥们的公司(只做PHP的公司)有一个业务逻辑需要不停的访问一个PHP方法,来实现他们业 务逻辑所以写了一个,只要输入“空秒数和URL”地址... 启动 定时访问URL.exe 文件开始
主要是GUI界面获取用户设定,与当前时间比较,利用线程休眠实现类似定时器功能,每分钟检查一次,最终启动命令。第一次自己动手,遇到了很多麻烦,程序也只是一个思路,很原始,适合新手,希望继续学习。