java定时器写法_java定时器的写法是什么样?

定时器的用法是java核心基础之一,很多特殊功能都需要用到定时器,下面一起来看看定时器是如何编写的吧。

示例:一个具备周期性定时(毫秒级);单时刻定时(秒级);多时刻定时(秒级)。后两个时间的设置必须符合“yyyy-MM-dd

HH:mm:ss”、“yyyy-MM-dd ”、“HH:mm:ss”、“HH:mm”、“yyyy-MM-dd HH”、“yyyy-MM-dd

HH:mm”格式的定时器

Java代码//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  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  getTimeList()

{

return timeList;

}

public void setTimeList(List  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 

{

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  tasks = new ArrayList  ();

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  timeList)

{

task.setTimeList(timeList);

//添加任务

this.addTask(task);

}

public void schedule(TimerTask task, long delay, java.util.List  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 

{

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  list = new ArrayList  ();

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);

}

}

以上就是今天的全部内容,想知道更多详细java基础知识就请继续关注我们了解详情吧。

推荐阅读:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS中vsftp安装、配置、卸载

CentOS中vsftp安装、配置、卸载转载http://www.zjgsq.com/1509.html转载于:https://blog.51cto.com/bbtao/1606816

struts2文件上传

/*** 单文件的上传* author Administrator**/public class FileUploadAction extends ActionSupport {private static final com.opensymphony.xwork2.util.logging.Logger logger LoggerFactory.getLogger(FileUploadAction.class);//上传文件private File upload;//保存路径…

python的所有库_Python 常用库

前言之前重写了视频字符画处理的代码,然后这两天又在研究命令行和网络。读了一点开源工具的代码,越来越觉得有必要针对性地学习一下一些重要的基础库。这里呢就列个小清单,把我认为有必要学习的库写一下。带 [ x ] 的表示已完成时间time&…

401 Palindrome

这道题最初我是没理解清楚题意,我以为那些reverse栏空白的字母是省略了.后来在这个论坛找到了更多的测试数据,发现了自己理解错了,重新读题 ,修改了下代码- -.弄了很久才AC 我的思路和别人有点不同的是,我是通过计算来得到在常量表中的位置 好吧 这道题本来该总结很多的,今天…

东北大姐剪纸被误认为油画,遭人质疑二十多年,只因太过逼真,看完后:真香!不愧是天下第一剪!...

全世界只有3.14 % 的人关注了爆炸吧知识“这是剪纸?太惟妙惟肖了,我还以为是水彩画呢!”这是一位网友的留言。茂盛的树木、潺潺的流水……这些栩栩如生的场景,真难想象竟是出自,一双巧手和一把剪刀。这些作品,全部来自…

2021 年 9 月 TIOBE 指数 C# 同比增长突破 1.2%

TIOBE 编程社区指数是编程语言流行程度的指标。该指数每月更新一次。评级基于全球熟练工程师、课程和第三方供应商的数量。谷歌、必应、雅虎、维基百科、亚马逊、YouTube 和百度等流行搜索引擎用于计算评分。C# 近期发展状态不错,依旧在榜单中排第五,但排…

java基础面向对象_java基础面向对象

一、面向对象之封装1. 面向对象的三个特征是:封装、继承和多态。2. Java开发过程:要实现某个功能,首先要找能够实现这个功能的对象,如果没有找到,就自己造一个对象,将要实现的功能定义到对象中,…

linux 学习笔记 显示压缩文件 gong.zip 的文件内容

#zip -v gong zip zip info: xxx >删除压缩文件中俄smart.txt 文件 #zip -d gong.zip smart.txt deleting:smart.txt >向压缩文件中gong.zip中添加rpm_info.txt文件 #zip -m gong.zip ./rpm_info.txt adding:rpm_info.txt deflated 79% Unzip命令解压缩文件 >将gong.z…

2010年5月系统集成项目管理工程师上午试卷参考答案(讨论版)

鉴于个人精力有限,其他答案将由51CTO相关工作人员不断更新,详见http://training.51cto.com/art/201005/200323.htm以题会友,欢迎跟贴拍砖、讨论。

python qt信号在qml 的使用_QML与Python通信

对于Python3和QML通信,实际上就是 PyQt5QMLPython3混合编程,这是必须的,因为QML做图形界面比较容易,但是做功能实现就用Python比较好,虽然QML也能嵌入 JavaScript代码进行实现,但是这样话还不如用Python来实…

那些35岁的程序员都去哪了

阅读本文大概需要11分钟。大家好,我是findyi,前段时间写过一篇关于大龄程序员的文章:那些40岁的程序员都去哪了,引发了大家的思考和讨论,不少读者私聊问:除了这些出路,还有没有其他可能&#xf…

Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据 二)...

在Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据一)中,解释了如何把Crystal Report整合到Sharepoint2010并把报表数据显示出来,但这样并不完整,因为我们在开发时是以系统帐户进…

那些拧不开瓶盖的女生全都是装的?理工男这样想......

全世界只有3.14 % 的人关注了爆炸吧知识昨天,超模君我正在思考人生,八岁的表妹突然提着一瓶矿泉水站在了我的面前。她可怜兮兮的说:“我想喝水,但是拧不开”。我:“........."超模君我明明亲眼见过她一口气拧开过…

java 代码同步_Java同步代码块 转

Java 同步块(synchronized block)用来标记方法或者代码块是同步的。Java同步块用来避免竞争。本文介绍以下内容:Java同步关键字(synchronzied)实例方法同步静态方法同步实例方法中同步块静态方法中同步块Java同步示例Java同步关键字(synchronized)Java中的同步块用s…

Office 2010 64位版本

最新的Office 2010有了x86和x64两种不同的版本,众所周知的使用x64版本具有可以支持更大的内存等特点,但是也会出现一定的兼容性问题。其中感觉影响比较大的是Access的32位版本和64位版本创建的数据库无法通用,这样以前创建的Access文件就无法…

JUnit 测试

Junit 使用 1、忽略测试方法。在使用Test的方法上使用Ignore,将不会对此方法进行测试 2、测试套件 解决的问题: 1、对测试类进行统一测试,而不必在单独测试类上一个一个进行测试。 使用JUnit的RunWith以及SuiteClassses注解,Suite…

【另类见解】秒杀并非高不可攀

“一提到秒杀很简单这个话题,我知道要被别人鄙视了:你不懂高并发... 这年头开头不画个思维导图都觉得掉价image谈到秒杀,网络上不少于几千片文章,但是大多大同小异。如果你的微信当中关注了几个编程技术类的公众号,我敢…

我又相信爱情了!

1 圣诞限定款的肥宅快乐水更好喝了吗?不!更贵了2 周边鬼才!这手机壳我爱了3 你以为是个王者,其实是个大脸......4 高温超导材料达到临界温度后能使物体悬浮在不同位置5 火山爆发你见过吗?6 我又相信爱情了!…

opencv计算两数组的乘积_#剑指Offer#12. 构建乘积数组

题目描述:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1]。其中B中的元素B[i]A[0] * A[1]... * A[i-1] * A[i1]... * A[n-1]。不能使用除法。解题思路:首先,仔细理解题意,B[i]是A数组所有元素的乘积,但是没…

python引用numpy出错_使用numpy时出错

我尝试使用pandas python进行excel操作。在每当我尝试使用pandas库时,它都会给我错误的提示:numpy没有安装。在现在,当我尝试安装pip install numpy和pip安装pandas时,它说需求已经满足了。在但是当我尝试做一个简单的numpy教程时…