java 多线程 day02 定时器
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 定时器的更多相关文章
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...
- java 多线程Thread 子类 定时器Timer
定时器Timer, 定时器分类: 1,指定时间指定任务(明天早上8点准时提醒我起床),相当于linux里面的at命令 2,周期性的执行任务(每隔三分钟闹钟响一次),相当于Linux里面的cron命令 ...
- Java多线程编程核心技术
Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...
- Java多线程学习开发笔记
线程有有序性和可见性 多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现. 在多个线程之间共享类的一个对象,这个对象是被创建在主内存(堆内存)中,每个线程都有自己的工作内存(线 ...
- -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中
本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait( ...
- 《Java 多线程编程核心技术》- 笔记
作为业务开发人员,能够在工作中用到的技术其实不多.虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上.因为,我们用的框架已经把这些事做掉了. 比如web开发,外面有大 ...
- java多线程系列六、线程池
一. 线程池简介 1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池. 2. 使用线程池的好处 a) 降低资源的消耗.使用线程池不用频繁的创建线程和销毁线程 b) 提高响应速度,任 ...
- Java——多线程练习
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- JAVA多线程读写文件范例
在写之前先声明,本文是基于之前在博客园网站上检索到的一份JAVA多线程读写文件的示例,我在写自己的程序时是在那位作者写的基础上做了改良,但已不记得原文的地址.如果有知情者,烦请帖出地址,我在此文上加入 ...
随机推荐
- quartz定时任务框架之实例
import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import java.util.Date; public class ...
- 页面表单里的图片上传ENCTYPE="multipart/form-data"
ENCTYPE="multipart/form-data"用于表单里有图片上传. <form action="<%=basePath %>asyUplo ...
- Python笔记8:网络编程
python内置封装了很多常见的网络协议的库,因此python成为了一个强大的网络编程工具,这里是对python的网络方面编程的一个简单描述. urllib 和 urllib2模块 urllib 和u ...
- JS刷新页面后滚动条的位置不变
有时候,在网页中点击了页面中的按钮或是刷新了页面后,页面滚动条又 会回到顶部,想看后面的记录就又要拖动滚动条,或者要按翻页键,非常不方便,想在提交页面或者在页面刷新的时候仍然保持滚动条的位置不变,最好 ...
- Java反射基础(一)
构造方法的获取 1. 四个方法:getConstructors()获取所有的构造方法: getConstructor(parameters)获取匹配参数的构造方法: getDeclaredCons ...
- boost - 正则表达式xpressive
正则表达式是一套处理文本强有力的工具: 它使用一套复杂的语法规则,可以解决文本处理领域的绝大多数问题; 而这些问题通常是字符串算法很难甚至无法解决的. C++98标准中没有内置的正则表达式支持,使得 ...
- SurvivalShooter学习笔记(五.敌人生命)
敌人生命系统(受伤 死亡) 敌人生成后有初始生命,被攻击受伤有打击特效,降低生命值,直至死亡: 死亡后怪物:播放死亡音效,动画,然后下沉地表,销毁:玩家:得到相应分数. 敌人生命脚本如下: 1.变量: ...
- JavaScript------一元运算符+的使用
var y = "5"; // y 是一个字符串 var x = + y; // x 是一个数字 var y = "John"; // y 是一个字符串 var ...
- MySQL中的日期和时间函数
常用日期函数如下: 函 数 功 能 CURDATE() 获取当前日期 CURTIME() 获取当前时间 NOW() 获取当前的日期和时间 UNIX_TIMESTAMP(date) 获取日期的U ...
- 61、常规控件(4)TabLayout-便捷实现标签
<android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width=&q ...