• 使用JUC实现定时任务


    第一种:使用Executors.newScheduledThreadPool实现定时任务

    这种实现方式是阿里规范不推荐的使用方式,有资源耗尽的风险

    import java.util.concurrent.Executors;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.ScheduledFuture;
    
    import static java.util.concurrent.TimeUnit.SECONDS;
    
    /**
     * @author Created by niugang on 2019/10/17/14:40
     */
    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;
    
    /**
     * @author Created by niugang on 2019/10/17/15:10
     */
    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
    @Slf4j
    public 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提供的,如果在还满足不了可以借助三方插件

    微信公众号
    JAVA程序猿成长之路

  • 相关阅读:
    hreeJS加载Obj资源后如何实现内存释放?
    cookies,sessionStorage 和 localStorage 的区别
    解决ios手机页面overflow scroll滑动很卡的问题
    移动端计算滑动的距离
    设置滚动位置
    css实现右侧固定宽度,左侧宽度自适应
    5.Javascript 原型链之原型对象、实例和构造函数三者之间的关系
    3.说一下你了解的弹性FLEX布局.
    一些面试题 没有答案
    嵌入式开发板和学习推荐平台——最新迅为4412开源硬件开发板
  • 原文地址:https://www.cnblogs.com/niugang0920/p/12187014.html
Copyright © 2020-2023  润新知