邹平网站建设公司,小程序项目描述怎么写,wordpress购买会员升级,建筑方案设计步骤Java创建定时器的三种方式 第一种#xff0c;常见的thread#xff0c;创建一个Thread让他让循环里一直执行#xff0c;通过 Thread.sleep 来达到 定时任务的效果。 栗子如下#xff1a;
public static void main(String[] args) {final long timeTnterval 1000;Runnable …Java创建定时器的三种方式 第一种常见的thread创建一个Thread让他让循环里一直执行通过 Thread.sleep 来达到 定时任务的效果。 栗子如下
public static void main(String[] args) {final long timeTnterval 1000;Runnable runnable new Runnable() {public void run() {while (true){System.out.println(I am a handsome);try {Thread.sleep(timeTnterval);}catch (Exception e){e.printStackTrace();}}}};Thread thread new Thread(runnable);thread.start();}第二种启动和取消任务都可以控制可以指定你想要的delay时间(开始等待时间)。实现时Timer类可以调度任务而 TimerTask 类则是在run方法中实现具体任务Timer可以调度多个任务它是线程安全的。当 Timer 的构造函数被调用时会创建一个线程这个线程用来调用任务。 栗子如下
public static void main(String[] args) throws ParseException {TimerTask timerTask new TimerTask() {Overridepublic void run() {System.out.println(Hello !!);}};SimpleDateFormat simpleDateFormat new SimpleDateFormat(yyyy-MM-dd hh:mm:ss);Date currentDate simpleDateFormat.parse(2020-5-14 14:32:20);Timer timer new Timer();// 2020-5-14 14:32:20 当前时间执行timer.schedule(timerTask,currentDate);}注意 由于Timer类不捕获异常, 在调度多任务时只要其中一个任务的异常没有捕获其它任务便会也就会自动停止建议使用 ScheduledExecutorService 。也就时下面的第三种 第三种相对上面两种方式ScheduledExecutorService 支持多线程因为它是由线程池来执行任务的不像Timer 单线程的一样只能串行执行如果其中一个任务执行时间过长会影响到其他任务的执行然后就可能会有各种接踵而来的问题。其次 ScheduledExecutorService 也在线程中捕获了异常不至于出现像 Timer 类一样的问题。可以说是 Timer 类的完美替换者即解决了单线程也处理了异常。所以推荐使用 栗子如下
public static void main(String[] args) {Runnable runnable1 new Runnable() {public void run() {System.out.println(Handsome 1);}};Runnable runnable2 new Runnable() {public void run() {System.out.println(Handsome 2);}};ScheduledExecutorService service Executors.newSingleThreadScheduledExecutor();/*** 参数2首次执行延迟时间* 参数3每次间隔执行时间*///靓仔1号service.scheduleAtFixedRate(runnable1, 5, 1, TimeUnit.SECONDS);//靓仔2号service.scheduleAtFixedRate(runnable2, 5, 1, TimeUnit.SECONDS);}第三种的结果可以看到 靓仔1 靓仔2 同时在执行。
文章皆为学习记录如有错误之处欢迎指出一起学习3q