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网别的相干文章!