学习java多线程的笔记2--Timer类与TimerTask类的使用

原创 2012年03月26日 22:05:09

今天看了《传智播客_张孝祥_Java多线程与并发库高级应用视频教程》第二讲,只要讲了定时器Timer与TimerTask类的使用

其中有一种使用方案:

见代码:

package cn.yang.thread;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class ThreadTimer {

	private static int DELAY=1000;
	private static int PERIOD=2000;
	/**
	 * 定时器的使用
	 * @param args
	 */
	public static void main(String[] args) {
		twoTimer2();
	}
	/**
	 * 重复新建定时器
	 */
	private static void twoTimer2(){
		
		// void schedule(TimerTask task, long delay, long period) 
		//安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。 
		new Timer().schedule(new MyTimerTask(), DELAY);
		while(true){
			System.out.println(new Date().getSeconds());
			try{
				Thread.sleep(1000);
			}catch(InterruptedException e){
				
			}
		}
	}
	
	static class   MyTimerTask extends TimerTask{
	
		@Override
		public void run() {
			count=(count+1)%2;
			System.out.println("MyTimerTask-->helloWorld!"+count);
			new Timer().schedule(new MyTimerTask(), 1000+1000*count);
		}
		
	}
	private static int count = 0;
}

上面代码中:

new Timer().schedule(new MyTimerTask(), DELAY);

其中的new MyTimerTask(),MyTimerTask是一个内部类


	static class   MyTimerTask extends TimerTask{
	
		@Override
		public void run() {
			count=(count+1)%2;
			System.out.println("MyTimerTask-->helloWorld!"+count);
			new Timer().schedule(new MyTimerTask(), 1000+1000*count);
		}
		
	}

由于要在main(.)方法中使用MyTimerTask内部类,所以将其声明为 static class MyTimerTask....

在MyTimerTask内部类中的run()方法,有一句:

new Timer().schedule(new MyTimerTask(), 1000+1000*count);
表示新安排一个任务,即
new MyTimerTask()//....
这样就可以实现重复使用定时器了,但要注意MyTimerTask内部类的使用,像下面那样就不行了,会报错:Error:Task already scheduled or cancelled

这样的代码如下:

	private static void twoTimer(){
		// void schedule(TimerTask task, long delay, long period) 
		//安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。 
		new Timer().schedule(new TimerTask() {
			
			@Override
			public void run() {
				System.out.println("helloWorld!");
				//1、再新建一个定时器,不过是使用自身  this,
				//Error:Task already scheduled or cancelled
				//Task已经被使用
				new Timer().schedule(this, DELAY);
			}
		},DELAY,PERIOD);
		
		
		while(true){
			System.out.println(new Date().getSeconds());
			try{
				Thread.sleep(1000);
			}catch(InterruptedException e){
				
			}
		}
	}
	

所以,上面是使用定时器Timer类和TimerTask类的一些要注意的问题

每天都要进步才行!加油....

很感谢张老师的java视频教程,可惜他不在世界上了,但还有很多他站起来的!




Java定时器(一)Timer类和TimerTask类

Java定时器(一)Timer类和TimerTask类
  • fanrenxiang
  • fanrenxiang
  • 2017年04月09日 22:09
  • 1090

Java多线程基础(二)定时器类:Timer类和TimerTask类

Java多线程基础(二)定时器类:Timer类和TimerTask类Timer类和TimerTask类是jdk实现定时器功能的早期方法,jdk1.5以前就支持Timer类和TimerTask类。JDK...
  • kingzone_2008
  • kingzone_2008
  • 2015年04月25日 14:36
  • 5865

TimerTask使用

                              任务计划  对于任务计划定时执行,JDK提供了java.util.Timer与java.util.TimerTask类。而Timer功能有限...
  • yefriendly
  • yefriendly
  • 2008年05月28日 15:39
  • 3663

Java线程和多线程(十)——TimerTask

Java中的java.util.Timer是一个工具类,可以用于调度一个线程在将来的某一个时刻执行特定的任务。Java Timer类可以将一个任务定时执行一次,或者是以后以每隔一定的时间间隔来触发一次...
  • EthanWhite
  • EthanWhite
  • 2016年10月15日 19:12
  • 6448

java多线程中常用的线程帮助类

java.util.concurrent 类 Exchanger java.lang.Object java.util.concurrent.Exchanger 类型参数:V - 可以交...
  • qq_32535477
  • qq_32535477
  • 2016年12月22日 16:55
  • 575

[学习笔记]File类简单用法!

今天我们学习一下java中的File类 相应的API文档:File类 以下是本人做的一些整理: 下面的构造函数可以用来生成File 对象:           Fil...
  • u010388781
  • u010388781
  • 2016年04月16日 13:32
  • 312

java学习笔记总结

Java环境搭建: 下载、安装JDK:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html配置环...
  • pegsa
  • pegsa
  • 2016年05月22日 19:29
  • 7660

JAVA学习心得--类与对象

1、T为一个对象,若T=NULL,则T为空对象,空对象不能使用,不能让一个空对象去调用方法产生行为。如果程序中使用了空对象,程序运行时会出现异常:NullPointException。由于对象是动态地...
  • richard_2010
  • richard_2010
  • 2007年04月12日 09:31
  • 1373

感悟:Java的多线程跟Java的类系统之间的关系

一直对Java将线程封装成对象的技术不甚了了,昨天帮一个新员工定位rosjava使用问题,一开始以为是多线程问题,但多番尝试未果后,走查代码,发现他在onClick函数里new CustomRosNo...
  • happen23
  • happen23
  • 2016年03月31日 11:17
  • 859

TimerTask类和Timer类的cancel()方法详解

无论是TimerTask类还是Timer类,其cancel()方法都是为了清除任务队列中的任务。虽然都是清除任务队列中的任务,却有一些不同:TimerTask类中的cancel()方法侧重的是将自身从...
  • qq_30493075
  • qq_30493075
  • 2017年08月11日 17:43
  • 826
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习java多线程的笔记2--Timer类与TimerTask类的使用
举报原因:
原因补充:

(最多只允许输入30个字)