package com.czbk.thread;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; /**
* http://blog.csdn.net/xiaoliuliu2050/article/details/74014463
* http://blog.csdn.net/myblog_dhy/article/details/46791173
*
*
* Created by chengtao on 17/11/30.
*
* timer 定时器
* schedule 调度方法
* new Timer.schedule(TimerTask task, long delay)
* new Timer.schedule(TimerTask task, long delay, long period)
* new Timer.schedule(TimerTask task, Date date)
* new Timer.schedule(TimerTask task, Date firstTime, long period)
*
*/
public class Thread02_TraditionalThread_Timer {
private static int count = 0;
public static void main(String[] args) {
//注意:定时器并没有开启新的线程。可以通过先执行printTime,后执行定时任务来验证
doSomethingAfer1OSecond();
printTime(); } //主线程的计时器
public static void printTime(){
while (true){
System.out.println("主线程 计时:" + new Date().getSeconds());
try {
Thread.sleep(1000);
}catch (Exception e){
}
}
} // 定时器1: 10秒以后执行某个任务,只执行一次
public static void doSomethingAfer1OSecond(){
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器1,经过: 10000 毫秒后执行,只执行一次");
}
}, 10000);
} // 定时器2: 10秒以后执行某个任务,之后,每隔3秒执行一次
public static void doSomethingAfer1OSecondt_Afer3SecondsContinue(){
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器2,经过: 10000 毫秒后执行,之后每隔3000毫秒执行一次");
}
}, 10000,3000);
} // 定时器3_1: 任务每2/4间隔执行
public static void doSomethingAfer2And4Second_1(){
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器3_1,任务每2/4间隔执行");
//------------ 定时器 内部再创建一个定时器,当外部的定时器打印了之后,内部的定时器开始计时,定时
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器3_1,任务每2/4间隔执行");
}
}, 2000);
//------------
}
}, 2000);
} // 定时器3_2: 任务每2/4间隔执行,
public static void doSomethingAfer2And4Second_2(){
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器3_2,任务每2/4间隔执行");
//------------ 定时器 内部再创建一个定时器,当外部的定时器打印了之后,内部的定时器开始计时,定时
new Timer().schedule(this, 2000);//报错:Task already scheduled
//------------
}
}, 2000);
} // 定时器3_3: 任务每2/4间隔执行,
public static void doSomethingAfer2And4Second_3(){ class MyTimerTask extends TimerTask{
@Override
public void run() {
count++;
System.out.println("定时器3_3,任务每2/4间隔执行 count = " + count);
new Timer().schedule(new MyTimerTask(),2000+2000*(count%2));
}
} new Timer().schedule(new MyTimerTask(), 2000);
} // 定时器3_4: 任务每2/4间隔执行,
public static void doSomethingAfer2And4Second_4(){
while (true){
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器3_4,任务每2/4间隔执行 ");
}
}, 2000); }
} // 定时器4: 任务在指定时间开始执行,
public static void doSomethingInTheNeedDate(){
while (true){
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器4,任务在指定时间开始执行 ");
}
}, new Date());
}
} // 定时器5: 任务在指定时间开始执行,之后每隔一段时间执行一次
public static void doSomethingInTheNeedDatePeriod(){
while (true){
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器5: 任务在指定时间开始执行,之后每隔1秒执行一次 ");
}
}, new Date(),1000);
}
} }

java 多线程 day02 定时器的更多相关文章

  1. JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题

    JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...

  2. java 多线程Thread 子类 定时器Timer

    定时器Timer, 定时器分类: 1,指定时间指定任务(明天早上8点准时提醒我起床),相当于linux里面的at命令 2,周期性的执行任务(每隔三分钟闹钟响一次),相当于Linux里面的cron命令 ...

  3. Java多线程编程核心技术

    Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...

  4. Java多线程学习开发笔记

    线程有有序性和可见性 多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现. 在多个线程之间共享类的一个对象,这个对象是被创建在主内存(堆内存)中,每个线程都有自己的工作内存(线 ...

  5. -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

     本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁  sleep()和wait()方法的区别 为什么wait( ...

  6. 《Java 多线程编程核心技术》- 笔记

    作为业务开发人员,能够在工作中用到的技术其实不多.虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上.因为,我们用的框架已经把这些事做掉了. 比如web开发,外面有大 ...

  7. java多线程系列六、线程池

    一. 线程池简介 1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池. 2. 使用线程池的好处 a) 降低资源的消耗.使用线程池不用频繁的创建线程和销毁线程 b) 提高响应速度,任 ...

  8. Java——多线程练习

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  9. JAVA多线程读写文件范例

    在写之前先声明,本文是基于之前在博客园网站上检索到的一份JAVA多线程读写文件的示例,我在写自己的程序时是在那位作者写的基础上做了改良,但已不记得原文的地址.如果有知情者,烦请帖出地址,我在此文上加入 ...

随机推荐

  1. linux学习笔记32---命令ping和telnet

    Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器,看是不是开着”.不能打开网页时会说“你先ping网关地址192.168.1.1试试”. ...

  2. FileMonitorKit 文件操作监控工具

    本人业余时间写的一款文件操作监控工具,功能稳定.效果非常好,有兴趣的网友能够下载玩玩. 下载地址: 32位:http://pan.baidu.com/s/1o64ZFIi          FileM ...

  3. JVM Specification 9th Edition (3) Chapter 2. The Structure of the Java Virtual Machine

    Chapter 2. The Structure of the Java Virtual Machine 内容列表 2.1. The class File Format (class文件的格式) 2. ...

  4. 构建自己的embedded linux系统

    [教程]使用buildroot完全自定义自己的embedded linux系统(nand)http://www.eeboard.com/bbs/thread-38377-1-1.html [教程] [ ...

  5. 微信小程序1 - 扩展app.js

    常规的开发过程中, 每个Page的逻辑中,要使用 util.js   WapRequest.js, 需要在每个页面中书写 require('/utils/WapRequest'); 略繁琐 在app. ...

  6. input取值

    ----------------------------1------------------------------ <span class="lv-a-right" id ...

  7. C语言 百炼成钢25

    /* 题目61:编写一个名为removestring的函数,该函数用于从一个字符串中删除一定量的字符. 该函数接受三个参数: 第1参数代表源字符串 第2参数代表需要删除字符的起始位置(位置从0开始) ...

  8. 深入了解Go Playground

    简介 2010年9月,我们介绍了Go Playground,这是一个完全由Go代码组成和返回程序运行结果的web服务器. 如果你是一位Go程序员,那你很可能已经通过阅读Go教程或执行Go文档中的示例程 ...

  9. 下列哪个为JSP的隐含对象。

    下列哪个为JSP的隐含对象. A.env B.page C.jspinfo D.context 解答:B JSP有九个隐士对象 request对象:保存了很多客户端请求的信息. response对象: ...

  10. Tomcat服务器的默认端口是多少?怎样修改tomcat的端口?

    Tomcat服务器的默认端口是多少?怎样修改tomcat的端口? 解答:默认端口为8080,可以通过service.xml的Connector元素的port属性来修改端口.