java定时器 并发_【java多线程与并发库】— 定时器的应用 | 学步园

定时器的应用

1、  定时器主要涉及到两个类(java.util包中)

@-》public class Timer extendsObject

(一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。 )

@-->public abstract class TimerTask extendsObjectimplementsRunnable

(由 Timer 安排为一次执行或重复执行的任务。)

2、Timer类的构造方法:

构造方法摘要

String name)

创建一个新计时器,其相关的线程具有指定的名称。

String name, boolean isDaemon)

创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行。

与每个 Timer 对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。

计时器任务应该迅速完成。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程。因此,这就可能延迟后续任务的执行,而这些任务就可能“堆在一起”,并且在上述不友好的任务最终完成时才能够被快速连续地执行。

对 Timer 对象最后的引用完成后,并且 所有未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。但是这可能要很长时间后才发生。

默认情况下,任务执行线程并不作为守护线程 来运行,所以它能够阻止应用程序终止。如果调用者想要快速终止计时器的任务执行线程,那么调用者应该调用计时器的

cancel 方法。

如果意外终止了计时器的任务执行线程,例如调用了它的 stop 方法,那么所有以后对该计时器安排任务的尝试都将导致

IllegalStateException,就好像调用了计时器的 cancel 方法一样。

此类是线程安全的:多个线程可以共享单个

Timer 对象而无需进行外部同步。

此类不 提供实时保证:它使用 Object.wait(long) 方法来安排任务。

实现注意事项:此类可扩展到大量同时安排的任务(存在数千个都没有问题)。在内部,它使用二进制堆来表示其任务队列,所以安排任务的开销是 O(log n),其中 n 是同时安排的任务数。

实现注意事项:所有构造方法都启动计时器线程。

方法摘要

void

int

void

TimerTask task,

Date time)

安排在指定的时间执行指定的任务。

void

TimerTask task,

Date firstTime, long period)

安排指定的任务在指定的时间开始进行重复的固定延迟执行。

void

TimerTask task, long delay)

安排在指定延迟后执行指定的任务。

void

TimerTask task, long delay, long period)

安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。

void

TimerTask task,

Date firstTime, long period)

安排指定的任务在指定的时间开始进行重复的固定速率执行。

void

TimerTask task, long delay, long period)

安排指定的任务在指定的延迟后开始进行重复的固定速率执行。

3、TimerTask类的构造方法:

构造方法摘要

protected

方法摘要

boolean

abstract  void

long

实际 执行的已安排 执行时间。

实例1:

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

public class TimerTest {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

//每隔10s打印"hello,honey!";

new Timer().schedule(new TimerTask(){

@Override

public void run() {

// TODO Auto-generated method stub

System.out.println("hello,honey!");

}

}, 10000);

while(true){

System.out.println(new Date().getSeconds());//打印当前秒数

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

实例2:

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

public class TimerTest {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

//每隔10s打印"hello,honey!";

new Timer().schedule(new TimerTask(){

@Override

public void run() {

// TODO Auto-generated method stub

System.out.println("hello,honey!");

}

}, 10000,3000);//10s后打印,以后每隔3s打印一次

/*while(true){

System.out.println(new Date().getSeconds());//打印当前秒数

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}*/

}

}

运行结果:

1336553771_4856.png

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

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

相关文章

java返回object的类型_为什么标准java类的clone()返回Object而不是实际的类型

在java中允许指定函数返回的类型,例如下面的代码public class Test {static class Dad {Dad me() {return this;}}static class Son extends Dad {Son me() {return this;}}}已验证.我们来看看ArrayList类.它已经覆盖了clone()函数(至少我看到它在Oracle jdk 1.7源代码)public …

效率提升,英特尔助力企业驶入“快车道”

随着越来越多的企业加入数字化转型大军,每个企业都在期待着数字化带来的业务创新及优化。从云平台的应用、大数据的决策分析,再到工作流程自动化,企业的IT部门不再仅仅是维护企业本身的业务运作以及数据处理,而是需要接入整个生态…

java怎么写事件listener_java 事件监听器ActionListener

/** 功能:java事件监听器ActionListener*/package com.events;import java.awt.BorderLayout;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;public class changebgcolor extends JFrame implements Ac…

Spring AOP 使用介绍,从前世到今生

前面写过 Spring IOC 的源码分析,很多读者希望可以出一个 Spring AOP 的源码分析,不过 Spring AOP 的源码还是比较多的,写出来不免篇幅会大些。本文不介绍源码分析,而是介绍 Spring AOP 中的一些概念,以及它的各种配置…

求1到500以内所有的完数并输出。

如果一个数恰好等于除它本身外的所有因子之和&#xff0c;则这个数就称为完数。 例如&#xff1a;6的因子是1、2、3、&#xff0c;且6123&#xff0c;所以6是完数。 #include <stdio.h> void main() {int s,i,j;for(i1;i<500;i){printf("%d ",i);} } 在这…

java怎么用doss窗口_GitHub - doss128/symphony: 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台。...

下一代的社区系统&#xff0c;为未来而构建&#x1f4a1; 简介Symphony([ˈsɪmfəni]&#xff0c;n.交响乐)是一个现代化的社区平台&#xff0c;因为它&#xff1a;实现了面向内容讨论的论坛实现了面向知识问答的社区包含了面向用户分享、交友、游戏的社交网络100% 开源⚡ 动机…

机器学习算法比较

本文主要回顾下几个常用算法的适应场景及其优缺点&#xff01;&#xff08;提示&#xff1a;部分内容摘自网络&#xff09;。机器学习算法太多了&#xff0c;分类、回归、聚类、推荐、图像识别领域等等&#xff0c;要想找到一个合适算法真的不容易&#xff0c;所以在实际应用中…

还在用 Python 2.x?Python 3.7.0 正式发布!

6 月 27 日&#xff0c;期待已久的 Python 3.7.0 正式发布&#xff0c;与之同行的还有 3.6.6 版本的更新。此次&#xff0c;最新版的 Python 3.7.0 带来了诸多的新功能和优化&#xff0c;接下来&#xff0c;让我们一睹为快。Python 3.7.0 主要更新新的语法特性&#xff1a;PEP …

java entry的用法_Map.Entry用法

Java Entry用法./*** 遍历Map的方式* author MONEY*/public class test {public static void main(String[] arg0){Map mapnew HashMap();map.put("1", "da");map.put("2", "jia");map.put("3", "hao");//第一种使…

docker停止信号java_docker容器优雅停止

由于应用镜像是由spring boot制作的&#xff0c;在关注docker 容器停止之前&#xff0c;先看下Java应用是如何处理程序停止的。java shutdownhook在java程序停止前&#xff0c;我们可能会需要一些清理工作&#xff0c;如关闭数据库连接池&#xff0c;执行一些反注册等。Runtime…

2018 年你需要知道的 11 个 JavaScript 库

译者按&#xff1a;你可能已经用到Underscore或者Lodash。本文列举了11个常用的库来提高开发效率。为了保证可读性&#xff0c;本文采用意译而非直译。另外&#xff0c;本文版权归原作者所有&#xff0c;翻译仅用于学习。JavaScript依然是2018年最受欢迎、最流行的编程语言&…

云化要求下,数据库架构的演进

如今&#xff0c;大型企业如金融企业和银行等&#xff0c;在下一代的微服务架构转型要求下&#xff0c;需要基础软件和数据平台能够实现原生的云化&#xff0c;以满足微服务架构的需求。微服务&#xff0c;也就是一种面向服务的&#xff0c;有特定边界的松散耦合的架构。主要特…

java定义变量的输入_Terraform中输入变量

Terraform中输入变量把所有的信息&#xff0c;如access_key等全部硬编码显然是不安全的。因此需要能够参数化配置。变量定义首先需要先定义(声明)变量&#xff0c;放到一个.tf文件中&#xff0c;如&#xff1a;variable "access_key" {}variable "secret_key&qu…

消息中间件—简谈Kafka中的NIO网络通信模型

前面写的两篇RocketMQ源码研究笔记系列&#xff1a;1. 消息中间件—RocketMQ的RPC通信&#xff08;一&#xff09;2. 消息中间件—RocketMQ的RPC通信&#xff08;二&#xff09;基本上已经较为详细地将RocketMQ这款分布式消息队列的RPC通信部分的协议格式、消息编解码、通信方式…

java整属取余数_js取整数、取余数的方法

摘要&#xff1a;这篇JavaScript栏目下的“js取整数、取余数的方法”&#xff0c;介绍的技术点是“取余数、取整数、取余、取整、js、方法”&#xff0c;希望对大家开发技术学习和问题解决有帮助。1.丢弃小数部分,保留整数部分parseInt(5/2)2.向上取整,有小数就整数部分加1Math…

如何系统学习领域驱动设计?

一、领域驱动设计为何又焕发青春&#xff1f;领域驱动设计&#xff08;Domain Driven Design&#xff0c;DDD&#xff09;确实已不再青春&#xff0c;从 Eric Evans 出版了划时代的著作《领域驱动设计》至今&#xff0c;已有将近十五年的时间&#xff0c;在软件设计领域中&…

java当中有关循环的代码_有关Java循环的内容,编程中还是比较常用的,下面分享给大家几个循环的示例代码,练习一下。1、循环输出1到100之间所有能被3或能被4整除的数。pack...

有关Java循环的内容&#xff0c;编程中还是比较常用的&#xff0c;下面分享给大家几个循环的示例代码&#xff0c;练习一下。1、循环输出1到100之间所有能被3或能被4整除的数。package com.hz.loop02;/*** 1、循环输出1到100之间所有能被3或能被4整除的数。* author ztw**/publ…

java的编辑框丢失焦点_java – 捕获EditText丢失焦点

我是一名长期,自学成才的业余VB程序员,现在正在尝试自学Java和Android.我这样说,所以你会知道我不会说好语言,而且对这两种追求都是非常新的.我开发了一个Android表单,其中包含一系列EditText框,每个框的内容都要在用户填写后保存到数组中.如果用户按下Enter键,我已经想出了如何…

如何运用DDD解决团队协作与沟通问题?

领域驱动设计的核心是“领域”&#xff0c;因此要运用领域驱动设计&#xff0c;从一开始就要让团队走到正确的点上。当我们组建好了团队之后&#xff0c;应该从哪里开始&#xff1f;不是UI原型设计&#xff0c;不是架构设计&#xff0c;不是设计数据库&#xff0c;这些事情重要…

centos6 mysql 启动_【17-02-18】 【求助】centos6 mysql重启后无法正常启动

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼# service mysqld restartStopping mysqld: [ OK ]MySQL Daemon failed to start.Starting mysqld: [FAILED]下面是# vim /var/log/mysqld.log2017-02-16 18:32:07 12429 [Note] Plugin FEDERATED is disabled.2017-02-16 18:32:07…