线程池的关闭方式有几种,各自的区别是什么?

  在Java中,线程池的关闭方式有三种:shutdown()、shutdownNow()和awaitTermination()。

  1.'shutdown()'方法:

  ·该方法会平滑地关闭线程池,不再接受新的任务提交。

  ·它会等待所有已提交的任务执行完毕,包括已经在等待队列中的任务。

  ·如果线程池已经关闭,则调用该方法没有任何效果。

ExecutorService executor = Executors.newFixedThreadPool(5);

// 执行任务...

executor.shutdown(); // 关闭线程池

// 等待线程池中的任务执行完毕
try {
    executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
    // 处理中断异常
}

  2.'shutdownNow()'方法:

  ·该方法会强制关闭线程池,尝试中断正在执行的任务,并返回等待执行的任务列表。

  ·它会立即停止线程池的运行,不再处理等待队列中的任务。

  ·如果线程池已经关闭,则调用该方法没有任何效果。

ExecutorService executor = Executors.newFixedThreadPool(5);

// 执行任务...

List<Runnable> unprocessedTasks = executor.shutdownNow(); // 强制关闭线程池

// 处理未执行的任务
for (Runnable task : unprocessedTasks) {
    // 处理未执行的任务...
}

  3.'awaitTermination()'方法:

  ·该方法用于等待线程池中的任务执行完毕,或者在指定的时间内等待任务执行完毕。

  ·它会阻塞当前线程,直到满足以下条件之一:所有任务执行完毕、超过指定的等待时间、当前线程被中断。

  这些关闭方式可以根据具体需求选择合适的方法,shutdown()和awaitTermination()提供了一种平滑关闭线程池的方式,而shutdownNow()则提供了一种立即停止线程池的方式。

ExecutorService executor = Executors.newFixedThreadPool(5);

// 执行任务...

executor.shutdown(); // 关闭线程池

// 等待线程池中的任务执行完毕,最多等待1小时
try {
    if (!executor.awaitTermination(1, TimeUnit.HOURS)) {
        // 执行超时处理
    }
} catch (InterruptedException e) {
    // 处理中断异常
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值