早听说Timer中是单守护进程在执行所有的任务,在调度的时候会有一些问题,现做下面例子来测试:

首先做两个简单的任务:

1. TimerJOB1

package test;import java.util.Date;
import java.util.TimerTask;public class TimerJOB1 extends TimerTask {public TimerJOB1(){super();}@Overridepublic void run() {System.out.println("TimerJOB1:开始执行时间:"+new Date());try {//让线程睡30秒Thread.sleep(1000*30);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("TimerJOB1结束执行时间:"+new Date());}}

2.TimerJOB2

package test;import java.util.Date;
import java.util.TimerTask;public class TimerJOB2 extends TimerTask {public TimerJOB2(){super();}@Overridepublic void run() {System.out.println("TimerJOB2:开始执行时间:"+new Date());try {//让线程睡30秒Thread.sleep(1000*30);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("TimerJOB2结束执行时间:"+new Date());}}

3. 从现在开始 1 秒钟之后,每隔 5秒执行一次 TimerJob1 ,因为TimerJob1 的执行时间是大于30s ,那么在第一次调度未完成之前第二次调度就应该开始了,会发生什么事呢?

package test;
import java.util.Timer; public class TestTimer {    public static void main(String[] args) { Timer timer = new Timer(); long delay1 = 1 * 1000; long period1 = 5*1000; // 从现在开始 1 秒钟之后,每隔 5秒执行一次 job1 timer.schedule(new TimerJOB1(), delay1, period1); /*** <pre>* 执行结果:* TimerJOB1:开始执行时间:Fri Feb 22 15:20:32 CST 2013TimerJOB1结束执行时间:Fri Feb 22 15:21:02 CST 2013TimerJOB1:开始执行时间:Fri Feb 22 15:21:02 CST 2013TimerJOB1结束执行时间:Fri Feb 22 15:21:32 CST 2013TimerJOB1:开始执行时间:Fri Feb 22 15:21:32 CST 2013TimerJOB1结束执行时间:Fri Feb 22 15:22:02 CST 2013TimerJOB1:开始执行时间:Fri Feb 22 15:22:02 CST 2013</pre>*/} }

由上面可以看出,只有在当前的JOB完成之后才会执行下次job.

4. 分别调用两个job,都是每隔5秒,及第一个job第一次还没有执行完,第二个job第一次与第一个job第二次都该执行了,会一直调用一个job还是job1与job2轮换调用?

package test;
import java.util.Timer; public class TestTimer {    public static void main(String[] args) { Timer timer = new Timer(); long delay1 = 1 * 1000; long period1 = 5*1000; // 从现在开始 1 秒钟之后,每隔 5秒执行一次 job1 timer.schedule(new TimerJOB1(), delay1, period1); long delay2 = 1 * 1000; long period2 = 1*5000; // 从现在开始 1 秒钟之后,每隔 5 秒钟执行一次 job2 timer.schedule(new TimerJOB2(), delay2, period2); /*TimerJOB1:开始执行时间:Fri Feb 22 15:25:47 CST 2013TimerJOB1结束执行时间:Fri Feb 22 15:26:17 CST 2013TimerJOB2:开始执行时间:Fri Feb 22 15:26:17 CST 2013TimerJOB2结束执行时间:Fri Feb 22 15:26:47 CST 2013TimerJOB1:开始执行时间:Fri Feb 22 15:26:47 CST 2013TimerJOB1结束执行时间:Fri Feb 22 15:27:17 CST 2013TimerJOB2:开始执行时间:Fri Feb 22 15:27:17 CST 2013TimerJOB2结束执行时间:Fri Feb 22 15:27:47 CST 2013TimerJOB1:开始执行时间:Fri Feb 22 15:27:47 CST 2013TimerJOB1结束执行时间:Fri Feb 22 15:28:17 CST 2013TimerJOB2:开始执行时间:Fri Feb 22 15:28:17 CST 2013*/} }

java调度:(三)Timer中的单线程守护相关推荐

  1. Java求三个数中的最大值

    三个数a b c int a = 10;int b = 100;int c = 1000; 第一种方式if嵌套 int max = 0;if (a > b) {if (a > c) {ma ...

  2. java调度:(二)在项目中调度策略的选择

    目前的两个项目中,用到大部分的任务调度,有一些思考简单写下来. 一. 如果当前的任务调度很简单,例如:管理任务延迟执行("如1000ms后执行任务")以及周期性执行("如 ...

  3. 有效期判断功能 java_有效的Java第三版有哪些新功能?

    有效期判断功能 java 自从听说即将出版的有效Java 第三版以来,我一直想知道其中有什么新内容. 我假设将涵盖自Java 6以来引入Java的功能,的确如此. 但是,第三版Java开发人员经典版也 ...

  4. Java学习小程序(2)输出三个数中的最大值

    用户从控制台接收三个整数,通过程序找出三个数中的最大值.(3种方法) package day03; //输入三个int数中的最大值 import java.util.Scanner; public c ...

  5. 简单理解JAVA中什么是守护线程,什么是非守护线程?

    java中守护线程和非守护线程 什么是守护线程,什么是非守护线程? java有两种状态的线程 守护线程与非守护线程的区别 守护线程与非守护线程代码演示区别 创建守护线程 守护线程:主线程销毁停止,守护 ...

  6. JAVA 三目运算符 判断三个数中的最大值

    理解三目运算符使用规则 灵活嵌套使用 代码 import java.util.Scanner;public class MaxNumber{public static void main(String ...

  7. java 使用三元运算符和if-else获取两个和三个数中的最大值

    三元运算符格式 三元运算符:获取两个数中最大值 三元运算符:获取三个数中最大值 三元运算符:总代码 //案例1:获取两个数中最大的数int num1=78;int num2=56;int max1=( ...

  8. java调度:(一)几种任务调度的 Java 实现方法与比较

    转载自:http://www.oschina.net/question/129540_28053 综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实 ...

  9. java线程三种方法,Java基础_线程的使用及创建线程的三种方法

    线程:线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 进程:进 ...

最新文章

  1. 基于Dialog的MFC程序在启动时隐藏为托盘程序(四)
  2. 面试问什么是无损降级?
  3. python中画圆的代码_Python编程12:Python画图之turtle库如何画圆
  4. Servlet的部分request请求处理
  5. QT实现不同内置主题的外观
  6. 下面哪个字段是http请求中必须具备的_HTTP 协议报文结构及示例
  7. 条款5:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls)...
  8. 我觉得我们看到的所谓“善良人”
  9. always on sql 收缩日志_啥?我写的一条SQL让公司网站瘫痪了...
  10. 冒泡排序C语言(从小到大)
  11. 基于tkinter的九型人格测试系统介绍
  12. 卡诺模型案例分析_通过KANO模型来协调优先级排序(附实例)
  13. navicat 解析sql_navicat
  14. javaOOP -- 笔记
  15. 【学习笔记】《基于φ-OTDR的分布式扰动传感系统定位算法研究-北交-通信与信息系统-吴》重点笔记
  16. vue路由守卫beforeEach和afterEach
  17. Tomcat安装与部署
  18. 单声道数据转双声道_单声道转双声道方法
  19. MVC 音乐商店 第 9 部分: 注册和结帐
  20. k图着色 遗传算法的简单python伪代码

热门文章

  1. 在vue-cli中搭建mock服务器
  2. git 快速入门笔记
  3. android模拟器上安装/卸载app
  4. 面试小记---外部脚本必须包含 script 标签吗?
  5. Flex Accordion 和 TabNavigator组件浏览器跳转问题
  6. RIA开发权威指南 基于JavaFX(赠品)
  7. php 精度计算问题
  8. TYVJ P2032 「Poetize9」升降梯上 spfa最短路
  9. Quartz.Net进阶之二:关于触发器的更多信息
  10. CF 1103B Game with modulo