scheduledexecutorservice 的使用_使用J.U.C实现定时任务
生活随笔
收集整理的這篇文章主要介紹了
scheduledexecutorservice 的使用_使用J.U.C实现定时任务
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一種:使用Executors.newScheduledThreadPool實現定時任務
這種實現方式是阿里規范不推薦的使用方式,有資源耗盡的風險
import?java.util.concurrent.Executors;import?java.util.concurrent.ScheduledExecutorService;import?java.util.concurrent.ScheduledFuture;import?static?java.util.concurrent.TimeUnit.SECONDS;public?class?ScheduledExecutorTest?{????public?static?void?main(String[]?args)?{????????ScheduledExecutorService?scheduler?=?Executors.newScheduledThreadPool(1);????????final?Runnable?beeper?=?new?Runnable()?{????????????@Override????????????public?void?run()?{????????????????System.out.println("beep");????????????}????????};????????/**?????????*?initialDelay:首次執行延遲的時間?????????*?period:連續執行之間的一段時間?????????*/????????final?ScheduledFuture>?beeperHandle?=????????????????scheduler.scheduleAtFixedRate(beeper,?10,?10,?SECONDS);????????scheduler.schedule(new?Runnable()?{????????????@Override????????????public?void?run()?{????????????????System.out.println("任務取消了");????????????????beeperHandle.cancel(true);????????????}????????},?60,?SECONDS);????}}第二種:使用ScheduledThreadPoolExecutor實現定時任務
推薦的方式
import?com.google.common.util.concurrent.ThreadFactoryBuilder;import?java.util.Date;import?java.util.concurrent.ScheduledThreadPoolExecutor;import?java.util.concurrent.TimeUnit;public?class?ScheduledThreadPoolTest?{????private?static?ScheduledThreadPoolExecutor?executor;????static?{????????executor?=?new?ScheduledThreadPoolExecutor(5,?new?ThreadFactoryBuilder()????????????????.setNameFormat("Scheduled-thread").build());????}????public?static?void?main(String[]?args)?{????????ScheduledFuture>?scheduledFuture?=?executor.scheduleAtFixedRate(????????????????new?Runnable()?{????????????????????@Override????????????????????public?void?run()?{????????????????????????System.out.println("Execute?work?task:"?+?new?Date());????????????????????}????????????????}??,?10,?10,?TimeUnit.SECONDS);????????System.out.println(scheduledFuture.isCancelled());?????????//scheduledFuture.isDone()?如果此任務已完成,則返回true。完成可能是由于正常的終止、異常或取消——在所有這些情況下,此方法都將返回true。????????//scheduledFuture.isCancelled())?如果此任務在正常完成之前被取消,則返回true????????executor.schedule(new?Runnable()?{????????????@Override????????????public?void?run()?{????????????????System.out.println("取消任務");????????????????//嘗試停止所有正在執行的任務,停止等待任務的處理,并返回等待執行的任務列表。????????????????scheduledFuture.cancel(true);????????????????System.out.println(scheduledFuture.isCancelled());????????????}????????},?60,?TimeUnit.SECONDS);????}}第三種:SpringBoot中定時任務的創建方式
方式一:使用spring提供的注解
方式二:基于ThreadPoolTaskScheduler
@SpringBootApplication@Slf4jpublic?class?DemoApplication?implements?ApplicationRunner?{????@Autowired????private?ThreadPoolTaskScheduler?threadPoolTaskScheduler;????public?static?void?main(String[]?args)?{????????SpringApplication.run(DemoApplication.class,?args);????}????@Override????public?void?run(ApplicationArguments?args)?{????????threadPoolTaskScheduler.scheduleAtFixedRate(()?->?log.info("SPRING?BOOT?SCHEDULE"),?new?Date(),5000);????}????@Bean????public?ThreadPoolTaskScheduler?threadPoolTaskScheduler()?{????????return?new?ThreadPoolTaskScheduler();????}}第四種:使用Quartz
先使用jdk自帶的,如果滿足不了在使用spring提供的,如果在還滿足不了可以借助三方插件
總結
以上是生活随笔為你收集整理的scheduledexecutorservice 的使用_使用J.U.C实现定时任务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iphone电池怎么保养_怎么保持iPh
- 下一篇: linux 线程_浅谈Linux线程模型