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

java怎样定时执行任务【JAVA教程】,java,定时

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


导读:java怎样定时实行一个要领java完成定时功用有多种体式格局,下面引见3种:1、建立一个线程.importjava.util.Date;publicclas...

java怎样定时实行一个要领

java完成定时功用有多种体式格局,下面引见3种:

1、建立一个线程.

import java.util.Date;
public class ThreadTest {
    public static void main(String[] args) {
        // 设置实行周期
        final long timeInterval = 3000;
        
        Runnable runnable = new Runnable() {
            public void run() {
                while (true) {
                    System.out.println("Task Run ... " + new Date());
                    
                    try {
                        Thread.sleep(timeInterval);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();
    }
}

2、运用 JDK 自带的 API Timer 以及 TaskTimer。

这类体式格局和第一种简朴粗犷的体式格局有什么区别呢,重要体现在运用 API 能够在指定的时候最先启动使命,能够延期实行初次使命,一样也看能够设置肯定的时候距离,然则道理是是一样的,背景照样启动了一个线程,应当说是只要一个线程在实行使命,不论我们启动的 Task 有几个。所以这也会有题目,比方说一个一个使命没有实行完成,另一个使命就最先实行了,可能会发作并发题目。另有如果一个使命中报错,则线程就会被住手。

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class MyTask extends TimerTask{

    private String name;
    
    public MyTask(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = sf.format(new Date());
        System.out.println("exec MyTask ... 当前时候为:" + format);
        System.out.println(this.name +" 正在实行!" + sf.format(new Date()));
    }
    
    public static void main(String[] args) {
        Timer timer = new Timer();
        TimerTask task1 = new MyTask("Tasks 1");
        TimerTask task2 = new MyTask("Tasks 2");
        
        Calendar calendar1 = Calendar.getInstance();
        calendar1.add(Calendar.SECOND, 3);
        Calendar calendar2 = Calendar.getInstance();
        calendar2.add(Calendar.SECOND, 5);
        
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = sf.format(new Date());
        System.out.println("当前时候为:" + format);
        
        timer.schedule(task1, calendar1.getTime(), 3000L);
        timer.schedule(task2, calendar2.getTime(), 3000L);
    }

}

其实在 Timer 中,封装了一个 Task 的行列和 Time 的线程对象,我们自定义的 Task 的援用会放在行列中守候实行。

大抵是这么一个关联 Timer - TimerThread - TaskQueue - MyTask - run 固然终究实行的要领肯定是我们自定义使命中的 run 要领。由于我们自定义的使命已继续了 TimeTask ,而这个类已完成了 Runnable 接口。

3、运用ScheduledExecutorService

ScheduledExecutorService是做为并发东西类被引进的,这是最理想的定时使命完成体式格局。

1.比拟于Timer的单线程,它是经由过程线程池的体式格局来实行使命的。

2.能够很天真的去设定第一次实行使命delay时候。

3.供应了优越的商定,以便设定实行的时候距离。

import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class qwe {
    public static void main(String[] args) {
        //新建定时使命
        Runnable runnable = new Runnable() {
            //run要领中是定时实行的操纵
            public void run() {
                System.out.println(new Date());
            }
        };
        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
        /*
         * 参数一:command:实行线程
         * 参数二:initialDelay:初始化延时
         * 参数三:period:两次最先实行最小距离时候
         * 参数四:unit:计时单元
         */
        service.scheduleAtFixedRate(runnable, 0, 60, TimeUnit.SECONDS);
    }
}

ki4网,大批的免费Java入门教程,迎接在线进修!

以上就是java怎样定时实行使命的细致内容,更多请关注ki4网别的相干文章!

标签:java定时


欢迎 发表评论: