먼저, 계획된 작업을 정기적으로 실행하는 기능을 가진 Java 타이머(java.util.Timer)를 소개합니다. 타이머의 간격을 설정하여 미리 지정된 작업(java.util.TimerTask)
을 위해. 예: 매시간 타이머.schedule(TimerTask, 0, 60 * 60 * 1000) 작업을 실행합니다.
schedul() 메소드의 첫 번째 매개변수는 실행해야 하는 작업입니다. 이 클래스의 유형은 java.util.TimerTask입니다. 두 번째 매개변수는 작업을 실행하기 전의 대기 시간입니다. 세 번째 매개변수는 간격(밀리초)입니다./** * 定时任务测试类 * @author admin * */ public class TimerScheduleDemo extends TimerTask { public TimerScheduleDemo() { } @Override public void run() { print(); } public static void main(String[] args) { Timer timer = new Timer(); long delay1 = 1 * 1000; long period1 = 1000; // 从现在开始 1*1000 秒钟之后,每隔 1 秒钟执行一次 timer.schedule(new TimerScheduleDemo(), delay1, period1); /*long delay2 = 2 * 1000; long period2 = 2000; // 从现在开始 2 秒钟之后,每隔 2 秒钟执行一次 timer.schedule(new TimerScheduleDemo(), delay2, period2); */ } public static void print(){ System.out.println("method start"); } }하지만: 웹 프로젝트가 시작될 때 타이머가 자동으로 타이밍을 시작할 수 있기를 바라므로 웹 프로젝트 수명 동안 작업이 정기적으로 실행되므로 타이머를 시작하는 클래스는 일반적인 클래스가 될 수 없습니다. 클래스, 여기서는 서블릿 리스너 클래스를 사용하여 타이머를 시작합니다. 구성 파일에 이 리스너를 구성하면 프로젝트가 시작될 때 자동으로 로드되어 실행될 수 있으며 생존 기간은 전체 웹 프로젝트 수명 주기입니다. 태스크 클래스 메인 비즈니스 코드
/** * 定时器任务类:即调度任务类 * @author admin */ public class DelFileTask extends TimerTask{ private static boolean isRunning = false; private ServletContext context = null; public DelFileTask() { super(); } public DelFileTask(ServletContext context) { this.context = context; } @Override public void run() { if (!isRunning) { context.log("开始执行指定任务"); /** * 自己的业务代码 */ isRunning = false; context.log("指定任务执行结束"); } else { context.log("上一次任务执行还未结束"); } } }이 클래스는 주로 TimerTask를 상속하고 그 실행 메소드를 구현합니다다음은 서버의 시작을 듣고 태스크 스택에 태스크를 추가하는 리스닝 클래스입니다
/** * servlet监听器:监听服务启动时执行调度任务 * @author admin * */ public class ContextListener implements ServletContextListener{ public ContextListener() { } private java.util.Timer timer = null; /** * 初始化定时器 * web 程序运行时候自动加载 */ @Override public void contextInitialized(ServletContextEvent arg0) { /** * 设置一个定时器 */ timer = new java.util.Timer(true); arg0.getServletContext().log("定时器已启动"); /** * 定时器到指定的时间时,执行某个操作(如某个类,或方法) */ //设置执行时间 Calendar calendar =Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day =calendar.get(Calendar.DAY_OF_MONTH);//每天 //定制每天的16:10:00执行, calendar.set(year, month, day, 16, 10, 00); Date date = calendar.getTime(); System.out.println(date); int period = 1000; //每天的date时刻执行task,每隔persion 时间重复执行 timer.schedule(new DelFileTask(arg0.getServletContext()), date, period); //在 指定的date时刻执行task, 仅执行一次 //timer.schedule(new DelFileTask(arg0.getServletContext()), date); arg0.getServletContext().log("已经添加任务调度表"); } /** * 销毁 */ @Override public void contextDestroyed(ServletContextEvent arg0){ timer.cancel(); arg0.getServletContext().log("定时器销毁"); } }이 클래스는 주로 스케줄러를 설정하고 특정 요구 사항에 따라 작업을 수행하도록 합니다. 작업 리스너 클래스가 구현되었습니다. 다음 단계는 웹에서 리스너를 구성하는 것입니다. 타이머 및 예약된 작업 사용 예 Java 타이머 사용 방법 Timer-java tutorial
위 내용은 Java 예약 작업 테스트는 TimerTask를 상속합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!