- 浏览: 430264 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
xiesbao:
找到了,太坑爹了。
Intellij Idea 滚动条跳动的问题 -
hvang1988:
按照你说的例子,主备说的是dbtest1,dbtest2,db ...
阿里开源Mysql分布式中间件:Cobar -
hvang1988:
问个问题:一个数据库的表的全部数据只分布在一个cobar上。多 ...
阿里开源Mysql分布式中间件:Cobar -
SiKing:
多谢,一直被这个问题困扰
Intellij Idea 滚动条跳动的问题 -
guodage003:
多谢 解决了这个蛋疼的问题。。
Intellij Idea 滚动条跳动的问题
引用
一直在做JAVA采集程序,积累了自己JAVA采集API。在采集过程中,常常使用到定时器,在JAVA的API中有Timer和TimerTask两个类做定时器。精确度那可以肯定的,对周期性运行的程序定时效果很好。但是有个不好使用的地方就是不能直接设置在某个时刻运行,或在某几个时刻运行。为此参考了那两个类的写法,编写了一个自己定时器,也叫Timer和TimerTask还有个测试类TimerTest,用到的DateUtil类在附件中。这个定时器具备周期性定时(毫秒级);单时刻定时(秒级);多时刻定时(秒级)。后两个时间的设置必须符合“yyyy-MM-dd HH:mm:ss”、“yyyy-MM-dd ”、“HH:mm:ss”、“HH:mm”、“yyyy-MM-dd HH”、“yyyy-MM-dd HH:mm”格式。它们源码如下,敬请大家指教。
//TimerTask代码 import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; public abstract class TimerTask implements Runnable { private long period=-1; private String time; private List<String> timeList; private boolean isCancel=false; private boolean isFormart = false; public long getPeriod() { return period; } public void setPeriod(long period) { this.period = period; } public void setTime(String time) { this.time = time; } public String getTime() { return time; } public List<String> getTimeList() { return timeList; } public void setTimeList(List<String> timeList) { this.timeList = timeList; } public void cancel() { this.isCancel = true; } public boolean isCancel() { return isCancel; } public abstract void execute(); public void run() { //格式化传入的日期或日期时间或时间参数 if(!this.isFormart){ this.fomart(); } //确保指定的运行点在一秒钟内只运行一次 boolean isRun=false; //确保多个运行点中,每个运行点在一秒钟内只运行一次 int flag[]=null; try { flag=new int[this.timeList.size()]; } catch (Exception e) { } SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //当没有被取消时 while(!isCancel){ String dt=sdf.format(new Date()); if(this.period>0){ try { Thread.sleep(this.period); } catch (Exception e) { } this.execute(); } else if (this.time != null) { if(this.time.indexOf("-")>0){ if(this.time.equals(dt) && !isRun){ isRun=true; this.execute(); } } else{ if(this.time.equals(dt.substring(11)) && !isRun){ isRun=true; this.execute(); } } } else if(this.timeList!=null){ int loopIndex=0; for (String dateTime : this.timeList) { if(dateTime.indexOf("-")>0){ if(dateTime.equals(dt) && flag[loopIndex]==0){ this.execute(); flag[loopIndex]=1; } } else{ if(dateTime.equals(dt.substring(11)) && flag[loopIndex]==0){ this.execute(); flag[loopIndex]=1; } } ++loopIndex; } } } } private void fomart(){ if(!this.isFormart){ if(this.time!=null){ this.time=this.format(this.time); } if(this.timeList!=null){ for (int i=0;i<this.timeList.size();i++) { String dateTime=this.timeList.get(i); if(dateTime!=null){ this.timeList.set(i, format(dateTime)); } } } } else{ this.isFormart=true; } } private String format(String datetime) { if (datetime != null) { // 是否含有减号 boolean hasSubtrSign = datetime.contains("-"); // 是否含有冒号 boolean hasColonSign = datetime.contains(":"); // 12-23 12:33 if (hasSubtrSign == true && hasColonSign == true) { datetime = DateUtil.formatToEnglish(datetime); } else if (hasSubtrSign && hasColonSign == false) { datetime = DateUtil.formatToEnglish(datetime); } else if (hasSubtrSign == false && hasColonSign) { datetime = DateUtil.formatToEnglish(datetime).substring(11); } } return datetime; } } /////////////////////////////////////////////////////////////////// //Timer代码 import java.util.ArrayList; public class Timer extends Thread{ private boolean isStart=false; private boolean isCannel=false; ArrayList<TimerTaskBean> tasks=new ArrayList<TimerTaskBean>(); public Timer() { } public void cancel(){ this.isCannel=true; } public boolean isCannel() { return isCannel; } public void schedule(TimerTask task, long period) { task.setPeriod(period); //添加任务 this.addTask(task); } public void schedule(TimerTask task, long delay, long period){ try { Thread.sleep(delay); } catch (Exception e) { } task.setPeriod(period); //添加任务 this.addTask(task); } public void schedule(TimerTask task, String time) { task.setTime(time); //添加任务 this.addTask(task); } public void schedule(TimerTask task, long delay, String time) { try { Thread.sleep(delay); } catch (Exception e) { } task.setTime(time); //添加任务 this.addTask(task); } public void schedule(TimerTask task, java.util.List<String> timeList) { task.setTimeList(timeList); //添加任务 this.addTask(task); } public void schedule(TimerTask task, long delay, java.util.List<String> timeList) { try { Thread.sleep(delay); } catch (Exception e) { } task.setTimeList(timeList); //添加任务 this.addTask(task); } //添加任务 private void addTask(TimerTask task){ boolean isExist=false; for (TimerTaskBean ttBean : this.tasks) { if(task.equals(ttBean.getTask())){ isExist=true; break; } else{ isExist=false; } } if(!isExist){ tasks.add(new TimerTaskBean(task,false)); } //判断定时器线程是否启动 if(!this.isStart){ this.start(); this.isStart=true; } } public void run(){ // 是否取消所有任务的定时功能 while (!this.isCannel) { for (int i=0;i<tasks.size();i++) { TimerTaskBean ttBean = tasks.get(i); //判断是否开始运行 if(ttBean!=null &&!ttBean.isRun()){ ttBean.setRun(true); new Thread(ttBean.getTask()).start(); } } } //当取消定时器时,取消所有任务 if(this.isCannel){ for (TimerTaskBean ttBean : tasks) { ttBean.getTask().cancel(); } } } class TimerTaskBean { public TimerTaskBean() { } public TimerTaskBean(TimerTask task,boolean isRun) { this.task=task; this.isRun=isRun; } private boolean isRun = false; private TimerTask task = null; public boolean isRun() { return isRun; } public void setRun(boolean isRun) { this.isRun = isRun; } public TimerTask getTask() { return task; } public void setTask(TimerTask task) { this.task = task; } } } //////////////////////////////////////////////////////////////// //TimerTest代码 import java.util.ArrayList; public class TimerTest { public static void main(String[] args) { Timer t = new Timer(); T1 t1 = new T1(); T2 t2 = new T2(); t.schedule(t1, 1000); ArrayList<String> list = new ArrayList<String>(); list.add("11:44:30"); list.add("11:44:31"); list.add("11:44:32"); list.add("11:44:33"); list.add("11:44:34"); list.add("11:44:35"); list.add("11:44:36"); list.add("11:44:37"); t.schedule(t1, list); try { Thread.sleep(1000*4); } catch (Exception e) { } t1.cancel();//取消任务1,任务2线程停止 t.schedule(t2, 1000); t.schedule(t2, list); try { Thread.sleep(1000*4); } catch (Exception e) { } t2.cancel();//取消任务2,任务2线程停止 try { Thread.sleep(1000*4); } catch (Exception e) { } t.cancel();//取消定时器,定时器线程停止 } } class T1 extends TimerTask{ public T1() { } public void execute() { System.out.println(11111111); } } class T2 extends TimerTask{ public T2() { } public void execute() { System.out.println(22222222); } }
- DateUtil.rar (3.7 KB)
- 下载次数: 104
发表评论
-
深入理解Java内存模型
2014-11-08 16:54 1033深入理解Java内存模型(一)——基础深入理 ... -
阿里开源Mysql分布式中间件:Cobar
2014-08-12 11:54 64480这几天研究 ... -
今日开源介绍:Google Guava、Google Guice、Joda-Time
2014-08-11 11:55 18260一、Guava 是一个 Google 的基于java1.6的 ... -
Jackson 动态过滤属性
2014-06-20 16:15 3046在把java对象转换为json时,有时需要依据需求动态过滤掉 ... -
自实现CAS原理JAVA版,模拟下单库存扣减
2014-04-02 17:47 7077在做电商系统时,库存 ... -
JAVA逻辑判断工具类
2013-09-06 21:33 1770在开发过程中,经常需要对“对象”、Map、Collecti ... -
Servlet2.4 监听器
2011-06-17 17:48 1606Servlet API提供了基本的应用程序事件监听器接口。编程 ... -
JSP页面编译成Servlet类文件过程中所涉及到的编码问题
2011-02-23 12:16 2921当请求一个JSP页面时,一般的都需要经历下面几个阶段: 1 ... -
Java中的字符集编码入门(六)Java中的增补字符
2011-02-23 12:11 1485Java号称对Unicode提 ... -
Java中的字符集编码入门(五)Java代码中的字符编码转换
2011-02-23 12:08 1165如果你是JVM的设计者,让你来决定JVM中所有字符的表 ... -
Java中的字符集编码入门(四)网页文件的编码
2011-02-23 12:03 1104接着上节的思路说,一个网页要想在浏览器中能够正确显示,需要在三 ... -
Java中的字符集编码入门(三)GB2312,GBK与中文网页
2011-02-23 12:02 1264GB2312是对中国的开发人员来说很重要的一个词汇,它的来龙去 ... -
Java中的字符集编码入门(二)编码字符集与字符集编码的区别
2011-02-23 12:01 939需要再一次强调的是, ... -
Java中的字符集编码入门(一)Unicode与UCS的历史恩怨
2011-02-23 11:59 1067ASCII及相关标准 ... -
方便管理工程中的SQL语句
2010-10-13 17:13 1863引用 之前在项目开发时候,经理要求把所有的SQL语句挑出 ... -
常见通信名称缩写解释
2010-09-03 16:05 2360引用 在看新闻时,购买手机时,经常听到关于通信方面的一 ... -
飞信维脉系统(定时短息发送系统)
2010-08-01 21:27 1607引用 因为工作原因 ... -
HTTP协议介绍
2010-07-28 09:45 830引用 HTTP(HyperTextTransferPro ... -
Java调用存储过程举例
2010-07-23 18:22 925Java调用oracle存储过程的示例总结如下。 ... -
Oracle数据库链接池
2010-04-13 17:28 2023引用 很多时候我们都要操作数据库,高效数据库操作的第一步 ...
相关推荐
Java定时器是Java编程语言中用于执行特定任务的调度工具,它允许程序员在指定的时间间隔后执行特定的代码块或任务。在Java中,我们主要使用`java.util.Timer`类和`java.util.TimerTask`类来实现定时器功能。这两个类...
Java定时器(java.util.Timer)是Java标准库中用于调度任务执行的重要工具,它允许我们按照预设的时间间隔执行特定的任务。在Java程序设计中,定时器常常用于实现周期性的任务,比如定时备份数据、定时检查系统状态...
JAVA定时器,只要服务开启,就能指定某些代码在某个时刻执行,例如:监狱里罪犯的余刑天数,每天都要减少,就可以设置一个定时器在每天的23:59:59来执行减少余刑天数的天。
java定时器,import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; 规定每天几点执行一次
Java定时器框架Quartz是Java开发中用于任务调度的一个强大工具,它允许开发者精确地控制任务的执行时间,包括一次性任务和周期性任务。Quartz以其灵活性和稳定性,在企业级应用中广泛使用,尤其在需要定期执行后台...
JAVA定时器 JAVA定时器是一种基于Quartz框架的任务调度器,用于在指定的时间执行特定的任务。在 Spring 框架中,JAVA定时器可以与Quartz框架集成,实现自动执行任务的功能。 1. JAVA定时器的基本概念 JAVA定时器...
Java定时器(Timer)是Java Swing库中的一个类,它提供了调度任务在未来某个时间执行的能力。这个类主要用于在GUI应用程序中实现定时触发某些操作,比如更新界面、执行动画或者执行周期性的后台任务。Timer类结合了...
### Java定时器实现详解 在Java编程中,定时任务是常见的需求之一,无论是服务器的定期维护、数据同步,还是客户端的动画更新等场景,都需要用到定时器来精确控制任务的执行时间。本文将深入解析一个基于Java的简单...
在Java编程中,定时任务是不可或缺的一部分,它们用于执行周期性操作,如数据备份、监控、清理等。本文将深入探讨如何在Java中设置和停止定时任务,主要关注`java.util.Timer`和`java.util.TimerTask`,以及更现代的...
在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。 对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。
Java定时器和Spring定时器是Java开发中用于执行周期性任务的重要工具,它们在系统维护、数据同步、报告生成等场景中发挥着关键作用。本文将深入探讨这两个概念,以及如何在Spring框架中配置和使用定时器。 首先,...
Java定时器(Timer)是Java语言中用于调度任务的一个重要工具,它可以帮助我们在特定时间执行一次或重复执行某个任务。这个“java定时器.rar”压缩包可能包含了关于如何使用Java定时器的相关示例代码和教程。 Java...
Java定时器服务是Java平台中用于执行定时任务的关键组件,它允许开发者安排未来或定期的任务执行。在Java中,我们通常使用`java.util.Timer`类和`java.util.TimerTask`类来实现定时服务。这两个类提供了创建、调度和...
Java定时器,通常被称为Scheduler,是Java开发中用于执行定期任务的重要工具。它允许开发者在特定的时间间隔或者按照预设的计划执行代码,这在处理数据同步、日志清理、发送通知等场景中非常常见。在Java中,我们...
Java定时器和时间处理是Java开发中的重要组成部分,特别是在需要执行周期性任务或者对时间有精确控制的应用场景中。本文将深入探讨Java定时器(Timer)的使用以及如何获取和处理年月日、时间节点等时间相关的信息。 ...
Java定时器,也被称为`Timer`类,是Java标准库中的一个强大工具,它允许开发者在指定的时间间隔执行任务,从而实现定时操作。这个类在`java.util`包中定义,是实现定时任务调度的核心。在本文中,我们将深入探讨`...
Java定时器数字时钟是一种基于Java编程语言实现的软件,它可以模拟系统时间并实时更新显示。这个程序是在Eclipse 7.5集成开发环境中编写的,Eclipse是Java开发者广泛使用的IDE,它提供了丰富的功能,如代码编辑、...
Java定时器(Timer)是Java语言提供的一种用于执行定时任务的工具类,它位于java.util包下。在Java编程中,我们有时需要在特定的时间间隔内执行某些操作,例如每隔一段时间更新数据、发送通知或者执行定期维护等。这...