学习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类Timer类和TimerTask类是jdk实现定时器功能的早期方法,jdk1.5以前就支持Timer类和TimerTask类。JDK...

Java多线程2-线程协作、Timer和TimerTask

http://blog.csdn.net/undoner/article/details/8139178  线程协作        生产者/消费者模式是一个经典的线程同步以...

j2me 使用Timer和TimerTask来实现多线程

在Java中可以使用两种方式来实现多线程操作,这两种方式依次是: Timer类—定时器类派生自Object。它是个定时器类,作为后台线程,执行未来的任务。任务可安排一次性执行,或定期重复执行。于每个 ...

Java多线程基础使用(Thread|Runable|TimerTask&Timer)

Thread类 public class ThreadTest extends Thread { /** * @param learn how to use a Thread class...

【Java多线程】之十:Timer and TimerTask

When we create a Thread in java, by default it’s a user thread and if it’s running JVM will not term...

Java多线程总结(3)— Timer 和 TimerTask深入分析

1. 基本概念  java.util.Timer:是一个实用工具类,该类用来调度一个线程(schedule a thread),使它可以在将来某一时刻执行。 Java的Timer类可以调度一个任务运行...
  • Mark_LQ
  • Mark_LQ
  • 2015年12月15日 22:31
  • 2529

Java 中 Timer 和 TimerTask实现多线程

Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnabl...

java类Timer和TimerTask的使用

java类Timer和TimerTask的使用

《java多线程编程核心技术》读书笔记5:定时器Timer类的使用

第5章:定时器Timer 在JDK库中,Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一任务,Timer类的主要任务就是设置计划任务,但封装任务 的类是TimerTask,执行计划任...
  • GODBAR
  • GODBAR
  • 2016年09月26日 19:02
  • 350

java学习笔记2(多线程)

  • 2011年08月30日 19:02
  • 210KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习java多线程的笔记2--Timer类与TimerTask类的使用
举报原因:
原因补充:

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