定时器的应用

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

}

}*/

}

}

运行结果:

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

  1. python100以内的质数_[Python]多线程threading — 100以内素数的查找 | 学步园

    使用threading的继承Treading的方法 #coding:utf8 ''' def isprime(m): #质数是指只能被1和它本身整除的数 for i in range(2, m/2+1 ...

  2. java 多线程并发 问题_JAVA多线程和并发基础面试问答

    原文链接 译文连接作者:Pankaj  译者:郑旭东  校对:方腾飞 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌 ...

  3. java 单线程 并发_单线程_Java高并发专题系列_Java视频-51CTO学院

    Apache Kafka® 是 一个分布式流处理平台. Apache Kafka 是 一个分布式流处理平台. 1. 可以让你发布和订阅流式的记录. 2. 这一方面与消息队列或者企业消息系统类似. 3. ...

  4. libevent c++高并发网络编程_【多线程高并发编程】Callable源码分析

    程序猿学社的GitHub,欢迎Starhttps://github.com/ITfqyd/cxyxs 本文已记录到github,形成对应专题. 前言 通过上一章实现多线程有几种方式,我们已经了解多线程 ...

  5. 多线程导出excel高并发_用多线程优化Excel表格数据导入校验的接口

    公司的需求,当前某个Excel导入功能,流程是:读取Excel数据,传入后台校验每一条数据,判断是否符合导入要求,返回给前端,导入预览展示.(前端等待响应,难点).用户再点击导入按钮,进行异步导入(前 ...

  6. 苹果系统手机调用java线程出错_在多线程Java应用程序中调用已编译的m-file(.jar)时出错...

    我有一个简单的M文件 function [fRate,Height,Width] = media(filename) obj = mmreader(filename); fRate = obj.Fra ...

  7. solr 高并发_你真的了解并发编程吗?

    ​并发编程是提升程序性能的有效手段.不过,你是否真的了解并发编程...... 1.并发编程 Bug 的根源是什么? 2.volatile 实质上是解决什么问题? 3.什么是Happens-Before ...

  8. java取负数_[Java] 告别“CV 工程师”码出高效!(基础篇)

    作为一名资深的 CV 工程师,某天,当我再一次日常看见满屏的报错信息与键盘上已经磨的泛白的 Ctrl.C.V 这三个按键时,我顿悟了. 百度谷歌复制粘贴虽然很香,但是总是依靠前人种树,终会有一天失去乘 ...

  9. 第4章 Linux网络编程 22.多进程实现并发服务器、多线程实现并发服务器

    目录 多线程实现并发服务器 多进程实现并发服务器 多线程实现并发服务器 server_thread.c #include <stdio.h> #include <arpa/inet. ...

  10. java控制语句练习题_[Java初探实例篇02]__流程控制语句知识相关的实例练习

    本例就流程控制语句的应用方面,通过三个练习题来深入学习和巩固下学习的流程控制语句方面的知识,设计到,if条件判断语句,switch多分支语句,for循环语句及其嵌套多层使用,while循环语句. 练习 ...

最新文章

  1. ergo room and Margaret barton colonnade
  2. SP2010开发和VS2010专家食谱--第二章节--工作流
  3. 字体缩放 SignedDistanceField
  4. python制作测试报告_使用 python 生成 extent report 测试报告
  5. 利用doc命令启动与关闭服务
  6. spark 学习总结
  7. 笔记本重置找不到恢复环境_Win10 自带的疑问解答、备份、恢复还原、重置系统怎么使用?...
  8. 自动化运维工具SaltStack
  9. 自适应各终端懒人网址导航源码v1.6
  10. 大华存储服务器系统,大华重磅推出64盘位网络视频存储服务器
  11. 腾讯X5WebView集成使用
  12. Vijos训练计划 1-1 计数问题
  13. 【转】Photoshop 用户名.组织或序列号丢失或无效.应用程序无法继续.
  14. vue 头像 上传 裁剪
  15. js存储数据cookie,localhost,sessionstorage
  16. python中xlrd模块_Python中的xlrd模块使用原理解析
  17. 面试官问:除了ArrayList你还看过哪些List源码
  18. 唯品会测试工程师面试总结
  19. 涂鸦智能进击南美取暖器市场
  20. 全国计算机等级考试二级C语言考试题

热门文章

  1. 云原生应用架构转型不好做?阿里云这个平台让你一步到位!
  2. Dubbo 3.0 前瞻系列 | 2020双11,Dubbo3.0 在考拉的超大规模实践
  3. 60TB 数据量的作业从 Hive 迁移到 Spark 在 Facebook 的实践
  4. 新功能:阿里云负载均衡SLB支持HTTP访问强制跳转HTTPS
  5. Redis HyperLogLog 是什么?这些场景使用它~
  6. 这 10 行比较字符串相等的代码给我整懵了,不信你也来看看
  7. 破解面试难题8个角度带你解读SQL面试技巧!
  8. 腾讯云全面更新数据智能服务全景图!
  9. 细数阿里达摩院2019年的十个Flag
  10. php设置url,php 设置 url