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. 【待完善】make: command not found,以及libtool.m4 and ltmain.sh have a version mismatch问题的解决方案

    之前为了使用一个库,都是去下载源码,然后根据开发者提供的README手动用GCC编译,一直不能使用Makefile感觉很蛋痛,比如最近使用的ZThread 还是怪自己以前过于依赖IDE 最近发现用Cy ...

  2. Effective C++:条款39:明智而审慎地使用private继承

    (一) (1)private继承意味着"依据某物实现出".仅仅有实现部分被继承.接口部分应略去: (2)它仅仅在软件"实现"层面上有意义,在软件"设计 ...

  3. shell程序练习

    #!/bin/sh通知采用bash解释.如果在echo语句中执行shell命令date,则需要在date命令前面加符号&: 编辑完文件之后不能立即执行该文件,需要给文件设置可执行权限.chmo ...

  4. EMMC与nand flash的区别

    1.NAND Flash 是一种存储介质,要在上面读写数据,外部要加主控和电路设计. 2.eMMC是NAND flash+主控IC ,对外的接口协议与SD.TF卡类似:对厂家而言简化了电路设计,降低了 ...

  5. linux内核开机logo显示调试

    要使内核支持开机logo显示需要配置内核 配置如下: make menuconfig: Device Drivers  --->     Graphics support  --->    ...

  6. oracle tuning 工具

    工欲善其事, 必先利其器. oracle 调优方面有很多工具, 目前 UI 个人只打算使用 Toad. 重要文件 一. alert log file. (位置 parameter BACKGROUND ...

  7. va_list中的_vsntprintf使用介绍

    相信大家都用过sprintf这个函数,就是下面这样: int sprintf( char *buffer, const char *format [, argument] ... ); 在之前看到了用 ...

  8. easyui 扩展layout的方法,支持动态添加删除块

    $.extend($.fn.layout.methods, { remove: function(jq, region){ return jq.each(function(){ var panel = ...

  9. 安装Node.js以及Hexo

    安装前提 安装 Hexo 相当简单.然而在安装前,您必须检查电脑中是否已安装下列应用程序: Node.js 如何在Ubuntu上安装最新版本的Node.js https://hexo.io/zh-cn ...

  10. jQuery DataTables添加自定义多个搜索条件

    效果如下: 一.在前台页面定义输入搜索条件的文本框 <div class="ibox-tools"> <span>年度</span> @Html ...