旗下导航:搜·么
当前位置:网站首页 > JAVA教程 > 正文

Java线程之Timer定时器【JAVA教程】,Java,线程,Timer,定时器

作者:搜教程发布时间:2019-12-11分类:JAVA教程浏览:81评论:0


导读:定时/设计功用重要运用的就是Timer对象,它在内部照样运用多线程的体式格局举行处置惩罚,所以它和线程手艺照样有非常大的关联。Timer类重要作用就是设置设计使命,但封装使...

定时/设计功用重要运用的就是Timer对象,它在内部照样运用多线程的体式格局举行处置惩罚,所以它和线程手艺照样有非常大的关联。

Timer类重要作用就是设置设计使命,但封装使命的类倒是TimerTask类。TimerTask类是一个抽象类。

实行使命的时候晚于当前时候-----在将来实行的结果

import java.util.Date;
import java.util.TimerTask;
 
public class MyTask extends TimerTask{
 
	@Override
	public void run() {
		System.out.println("使命实行了, 时候为:" + new Date());
	}
}
 
public class Test1 {
	public static void main(String[] args){
		System.out.println("当前时候为: " + new Date());
		Calendar calendarRef = Calendar.getInstance();
		calendarRef.add(Calendar.SECOND, 10);
		Date runDate = calendarRef.getTime();
		
		MyTask task = new MyTask();
        // 检察Timer组织要领,建立一个Timer就是启动一个新的线程
		Timer timer = new Timer();
		timer.schedule(task, runDate); // 定时器在某个时候(runDate)实行某个使命(task)
	}
}

免费在线进修视频分享:java视频

Timer中许可有多个TimerTask使命及延时的测试

TimerTask是以行列的体式格局一个一个被递次性地实行,所以实行时候有大概和预期的时候不一致,由于前面的使命有大概斲丧的时候较长,则背面的使命运转的时候也被延后。

import java.util.Date;
import java.util.TimerTask;
 
public class MyTaskA extends TimerTask{
 
	@Override
	public void run() {
		try {
			System.out.println("A begin timer, 时候为:" + new Date());
			Thread.sleep(20000);
			System.out.println("A   end timer, 时候为:" + new Date());
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

import java.util.Date;
import java.util.TimerTask;
 
public class MyTaskB extends TimerTask{
 
	@Override
	public void run() {
		System.out.println("B begin timer, 时候为:" + new Date());
		System.out.println("B   end timer, 时候为:" + new Date());
	}
}
 
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
 
public class Test1 {
	public static void main(String[] args){
		System.out.println("当前时候为: " + new Date());
		Calendar calendarRef1 = Calendar.getInstance();
		Date runDate1 = calendarRef1.getTime();
		System.out.println("A设计时候为: " + runDate1);
		
		Calendar calendarRef2 = Calendar.getInstance();
		calendarRef2.add(Calendar.SECOND, 10);
		Date runDate2 = calendarRef2.getTime();
		System.out.println("B设计时候为: " + runDate2);
		
		MyTaskA task1 = new MyTaskA();
		MyTaskB task2 = new MyTaskB();
		Timer timer = new Timer();
		timer.schedule(task1, runDate1); // 定时器在某个时候(runDate)实行某个使命(task)
		timer.schedule(task2, runDate2);
	}
}

schedule(TimerTask task, Date firstTime, long period)

该要领的作用是在指定的日期以后按指定的距离周期,无穷轮回地实行某一使命。

import java.util.Date;
import java.util.TimerTask;
 
public class MyTask extends TimerTask{
 
	@Override
	public void run() {
		System.out.println("使命入手下手: "+new Date());
		System.out.println("mytask...");
		System.out.println("使命完毕: "+new Date());
	}
}
 
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
 
public class Run {
	public static void main(String[] args){
		System.out.println("当前时候为:"+new Date());
		Calendar c = Calendar.getInstance();
		c.add(Calendar.SECOND, 10);
		Date runDate1 = c.getTime();
		System.out.println("设计时候为:"+runDate1);
		
		MyTask myTask = new MyTask();
		Timer timer = new Timer();
		timer.schedule(myTask, runDate1, 10000);
	}
}

TimerTask类的cancel()要领

TimerTask类中的cancel()要领的作用是将本身从使命行列中举行消灭.

import java.util.Date;
import java.util.TimerTask;
 
public class MyTaskA extends TimerTask{
 
	@Override
	public void run() {
		System.out.println("A run timer="+new Date());
		this.cancel();
		System.out.println("A使命本身移除本身");
	}
}
 
import java.util.Date;
import java.util.TimerTask;
 
public class MyTaskB extends TimerTask{
 
	@Override
	public void run() {
		System.out.println("B run timer="+new Date());
	}
}
 
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
 
public class Run {
	public static void main(String[] args){
		System.out.println("当前时候为:"+new Date());
		Calendar c = Calendar.getInstance();
		Date runDate1 = c.getTime();
		System.out.println("设计时候为:"+runDate1);
		
		MyTaskA myTaskA = new MyTaskA();
		MyTaskB myTaskB = new MyTaskB();
		Timer timer = new Timer();
		timer.schedule(myTaskA, runDate1, 4000);
		timer.schedule(myTaskB, runDate1, 4000);
	}
}

Timer的cancel()要领

和TimerTask类中的cancel()要领消灭本身差别,Timer类中的cancel()要领作用是将使命行列中悉数的使命举行清空。

import java.util.Date;
import java.util.TimerTask;
 
public class MyTaskA extends TimerTask{
 
	@Override
	public void run() {
		System.out.println("A run timer="+new Date());
		this.cancel();
		System.out.println("A使命本身移除本身");
	}
}
 
import java.util.Date;
import java.util.TimerTask;
 
public class MyTaskB extends TimerTask{
 
	@Override
	public void run() {
		System.out.println("B run timer="+new Date());
	}
}
 
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
 
public class Run {
	public static void main(String[] args){
		System.out.println("当前时候为:"+new Date());
		Calendar c = Calendar.getInstance();
		Date runDate1 = c.getTime();
		System.out.println("设计时候为:"+runDate1);
		
		MyTaskA myTaskA = new MyTaskA();
		MyTaskB myTaskB = new MyTaskB();
		Timer timer = new Timer();
		timer.schedule(myTaskA, runDate1, 4000);
		timer.schedule(myTaskB, runDate1, 4000);
	}
}

schedule(TimerTask task, long delay)

该要领的作用是以实行schedule(TimerTask task, long delay)要领当前的时候为参考时候,在此时候基础上耽误指定的毫秒数后实行一次TimerTask使命。

import java.util.Date;
import java.util.TimerTask;
 
public class MyTask extends TimerTask{
 
	@Override
	public void run() {
		System.out.println("A run timer="+new Date());
	}
}
 
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
 
public class Run {
	public static void main(String[] args) throws InterruptedException{
		System.out.println("当前时候为:"+new Date());
		Calendar c = Calendar.getInstance();
		Date runDate1 = c.getTime();
		System.out.println("设计时候为:"+runDate1);
		
		MyTask myTask = new MyTask();
		Timer timer = new Timer();
		timer.schedule(myTask, 7000); // 设计使命耽误7秒后实行
		Thread.sleep(10000);
		timer.cancel();
	}
}

更多相干文章教程引荐:java入门教程

以上就是Java线程之Timer定时器的细致内容,更多请关注ki4网别的相干文章!

标签:Java线程Timer定时器


欢迎 发表评论: