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. (译)Getting Started——1.3.4 Writing a Custom Class(编写自定义的类)

     在开发IOS应用中,当你编写自定义的类时,你会发现很多的特殊场合.当你需要把自定义的行为和数据包装在一起时,自定义的类非常有用.在自定义的类中,你可以定义自己的存储.处理和显示数据的方法. 例如,I ...

  2. python网络编程学习笔记(10):webpy框架

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyi django和webpy都是python的web开发框架.Django的主要目的是简便.快速的开发数据库驱动的网站. ...

  3. MapReduce实战(一)自定义类型

    需求: 处理以下流量数据,第1列是手机号,第7列是上行流量,第8列是下行流量.将手机号一样的用户进行合并,上行流量汇总,下行流量也汇总,并相加求得总流量. 1363157985066 13726230 ...

  4. ARM与X86架构的对决[整编]

    CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构.它们的区别在于不同的CPU设计理念和方法.早期的CPU全部是CISC架构,它的设计目的是  CISC要用最少的机器语言 ...

  5. pl/sql 实例精解 05

    本章主要讨论 case 语句 1: case [SELECTOR] 2: when expression 1 then statement 1; 3: when expression 2 then s ...

  6. springboot查找配置文件路径的过程

    spring加载配置文件是通过listener监视器实现的,在springboot启动时: 在容器启动完成后会广播一个SpringApplicationEvent事件,而SpringApplicati ...

  7. 安装vm虚拟机

    1.本次win10系统安装vmware workstation  下载地址:http://www.ihacksoft.com/vmware-workstation-10-0-4.html 2.镜像使用 ...

  8. AWT从概念产生到完成实现只用了一个月

    这种糟糕的设计选择使得那些拥护Java“一次编写,到处运行 (write once, run anywhere)”信条的程序员们过得并不舒畅,因为AWT并不能保证他们的应用在各种平台上表现得有多相似. ...

  9. EEPlat的基于浏览器的在线开发技术

    EEPlat的开发内容主要包含配置开发和基于API的扩展开发两块内容. EEPlat的配置开发基于后台的配置环境.直接通过界面操作配置就可以. EEPlat的配置平台是用EEPlat自解释构建的.本身 ...

  10. XmLHttpRequst下载Excel

    //得到浏览器版本 myJqHelp.getBrowser = function () { var ua = window.navigator.userAgent; var isIE = !!wind ...