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,一经查实,立即删除!

相关文章

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

随着越来越多的企业加入数字化转型大军,每个企业都在期待着数字化带来的业务创新及优化。从云平台的应用、大数据的决策分析,再到工作流程自动化,企业的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 中的一些概念,以及它的各种配置…

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

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

机器学习算法比较

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

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

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

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

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

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

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

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

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

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

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

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

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

微服务等于Spring Cloud?一文告诉你微服务到底是什么

作者:TIM XU 原文:https://xiaoxubeii.github.io/articles/microservices-architecture-introduction/1微服务初探什么是微服务?首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应…

我们爬了上千个数据分析师信息, 你真的懂数据分析师嘛?

01 项目简介有人说,这个时代,只要站在了风口,猪都能飞起来,尤其互联网行业,千变万化,日异月殊,一不小心就错过了风口,如果没记错的话,前几年火的是App开发,后…

高可用Redis服务架构分析与搭建

作者:HorstXu 原文:https://www.cnblogs.com/xuning/p/8464625.html基于内存的Redis应该是目前各种Web开发业务中最为常用的Key-Value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热…

java怎么弄redis,java怎么使用redis

开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java。Java的安装配置可以参考我们的 Java开发环境配置 接下来让我们安装 Java redis 驱动:首先你需要下载驱动包 下载 jedis.ja…

我花了14个小时找了一下长春长生们究竟卖到了哪里去

前言本文首发于个人的公众号和v2ex,事先也没想到会有这么多人关注。在这边重新编辑一下,去掉了原先前言中对此次疫苗事件背景的描述及部分不严谨的措辞。全文的观点从技术讨论出发,尽量客观中立,观点及行为为员工自发,…

我们分析了50万条拼多多商品数据,告诉你到底是消费升级还是降级?

作者:放开那个猕猴桃来源:人工智能与大数据生活转自:知乎,恋习Python一、缘起我在杭州有位朋友,提到有家做社交的电商很火,叫拼多多,我没有在意,直到有一天,我居然在电视…

java并发集合面试题,那些经常被问的JAVA面试题(1)—— 集合部分

【本文转自极客原创 作者:张锋 原文链接:】Java集合框架是什么?说出一些集合框架的优点?每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用&…

拯救阿波罗14号!那些伟大太空计划背后的计算机工程师们

1971年1月31日,阿波罗14号发射。外太空旅行近一周后的凌晨,回程中的阿波罗14号突然面临一个严峻的问题:它可能没办法正常降落了。问题出在其计算机工程师Don Eyles编写的一个应急程序上,他必须在很短的时…

golang web php,golang 适合做web开发吗

使用go语言来做web开发,是非常方便的。如果不使用框架,仅仅使用net/http包,也能快速开发一个web应用。但是,官方包不支持RESTful风格的API,所以我们依然还是需要选择一个框架来帮助我们进行开发。 (推荐学习&#xff1…