调度线程池

工作中用到了线程池和调度线程相关的知识,记录一下

@Test
public void testThreadPool() throws InterruptedException {
    // 错误的创建线程池的方式
    ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
    // scheduleWithFixedDelay:执行完第一次任务后间隔1秒执行下一次任务
    scheduledExecutorService.scheduleWithFixedDelay(() -> {
        System.out.println("scheduleWithFixedDelay...");
    }, 1, 1, TimeUnit.SECONDS);
    // scheduleAtFixedRate:每1秒执行一次任务,即使上一个任务没有完成
    scheduledExecutorService.scheduleAtFixedRate(() -> {
        System.out.println("scheduleAtFixedRate...");
    }, 1, 1, TimeUnit.SECONDS);
    // 定义主线程休眠,否则调度线程在主线程结束后无法正常执行
    Thread.sleep(1000000000L);
}

@Test
public void testThreadPool() throws InterruptedException {
    // 正确的创建线程池的方式(可自定义线程名称,方便排查问题)
    ThreadFactory factory =
            new ThreadFactoryBuilder().setNameFormat("thread-name-%d").build();
    ScheduledExecutorService scheduledExecutorService = new ScheduledThreadPoolExecutor(1, factory,
            new ScheduledThreadPoolExecutor.AbortPolicy());
    // scheduleWithFixedDelay:执行完第一次任务后间隔1秒执行下一次任务
    scheduledExecutorService.scheduleWithFixedDelay(() -> {
        System.out.println("scheduleWithFixedDelay...");
    }, 1, 1, TimeUnit.SECONDS);
    // scheduleAtFixedRate:每1秒执行一次任务,即使上一个任务没有完成
    scheduledExecutorService.scheduleAtFixedRate(() -> {
        System.out.println("scheduleAtFixedRate...");
    }, 1, 1, TimeUnit.SECONDS);
    // 定义主线程休眠,否则调度线程在主线程结束后无法正常执行
    Thread.sleep(1000000000L);
}

阿里编码规约也禁止使用Executors或者显式创建线程(池),这是优化后的方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值