>  기사  >  Java  >  Java 스레드 타이머 타이머

Java 스레드 타이머 타이머

王林
王林앞으로
2019-12-11 11:58:242587검색

Java 스레드 타이머 타이머

타이밍/계획 기능은 주로 멀티스레딩을 사용하여 내부적으로 처리되는 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 video

Timer는 여러 TimerTask 작업을 허용하고 Delays Test

TimerTask는 Queue에서 하나씩 순차적으로 실행되기 때문에 이전 작업이 더 오래 걸릴 수 있어 실행 시간이 예상 시간과 일치하지 않을 수 있고, 후속 작업의 실행 시간에도 영향을 미치게 됩니다. 연기되었습니다.

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 클래스 Timer 클래스의 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 태스크, 긴 지연)

이 메소드의 기능은 스케줄(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 스레드 타이머 타이머의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제