线程池如何知道一个线程是否执行完成

从线程池内部

当我们把一个任务丢给线程池执行的时候,线程池会调度工作线程来执行run方法。
当run执行结束后,也就意味着这个任务完成了。所以线程池中的工作线程是通过同步调用任务的run()方法并且等待run()方法完成后。

从线程池外部

从外部线程池去获取线程池内部的任务执行状态 ,有几种方法可以实现。

1,线程池提供了一个isTerminated()的方法,可以循环去判断线程池状态,来去了解线程的运行状态,

一旦线程池的状态是Terminated意味着线程池中的所有任务都完成了,前提的主动调用isShutdown()方法。所以这个不是很友好

2,我们通过submit()方法,提供了了一个feature.get()方法,去获得任务执行结果,同步等待结果,只要feature.get()方法正常返回。就意味着传入线程池中任务已经执行完成了。

  • 使用isDone()方法:这个方法会返回一个布尔值,表示任务是否已经完成。如果任务已经完成,它将返回true,否则返回false。
  • 使用get()方法:这个方法可以阻塞当前线程,直到任务完成并返回结果。如果任务还没有完成,调用get()方法会一直等待,直到任务完成。
  • 使用isCancelled()方法:这个方法可以用来检查任务是否已经被取消。如果任务已经被取消,它将返回true,否则返回false

3,我们可以引入CountDownLatch,在线程池代码块的后面去调用countDown()方法。

   public static void main(String[] args) {
   
        ExecutorService executorService = Executors.newFixedThreadPool(2);
        CountDownLatch countDownLatch = new CountDownLatch(2);
        executorService.submit(new Runnable() {
   
            @Override
            public void run() {
   
                try {
   
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
   
                    throw new RuntimeException(e);
                }
                countDownLatch.countDown();
            }
        });
    }

相关推荐

  1. 线如何知道一个线是否执行完成

    2024-01-11 20:16:02       56 阅读
  2. 线知识

    2024-01-11 20:16:02       23 阅读
  3. 线执行流程

    2024-01-11 20:16:02       58 阅读
  4. 手写一个线

    2024-01-11 20:16:02       43 阅读
  5. spring boot中一般如何使用线

    2024-01-11 20:16:02       33 阅读
  6. Spring Boot中一般如何使用线

    2024-01-11 20:16:02       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-11 20:16:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-11 20:16:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-11 20:16:02       82 阅读
  4. Python语言-面向对象

    2024-01-11 20:16:02       91 阅读

热门阅读

  1. Mxnet导出onnx模型

    2024-01-11 20:16:02       46 阅读
  2. Python常用日期函数和日期处理方法

    2024-01-11 20:16:02       53 阅读
  3. Docker 概述

    2024-01-11 20:16:02       50 阅读
  4. K8S如何扩展副本集

    2024-01-11 20:16:02       40 阅读
  5. 如何在前端优化中处理大量的图像资源?

    2024-01-11 20:16:02       61 阅读
  6. KAFKA高级应用

    2024-01-11 20:16:02       47 阅读
  7. Golang 并发编程详解

    2024-01-11 20:16:02       55 阅读
  8. 苹果电脑安装office,如何在mac上安装office软件

    2024-01-11 20:16:02       64 阅读
  9. golang学习-map

    2024-01-11 20:16:02       57 阅读