java - 跟踪提交给 ThreadPoolExecutor 的任务

标签 java multithreading executor futuretask

我正在 ThreadPoolExecutor 中运行多个任务。我将其初始化如下:

private VideoExportExecutor executor;
private BlockingQueue<Runnable> jobQueue;

public void initialiseVideoProcessor()
{
    jobQueue = new LinkedBlockingQueue<Runnable>();
    executor = new VideoExportExecutor(1, 1, Long.MAX_VALUE, TimeUnit.SECONDS, jobQueue);
}

我自己实现了 runnable (VideoExportThread),其中包含一个 getProgress() 方法来跟踪提交任务的进度。我提交的实例如下:

executor.submit(new VideoExportThread(gcmPath));

我正在寻找一种方法来查询当前/未决线程的执行程序/阻塞队列。我尝试使用 jobQueue.toArray() 并覆盖执行器方法 beforeExecute(Thread t, Runnable r) 但在这两种情况下返回的 runnable 都是 FutureTask 类型不包含太多数据。有没有办法让我使用它来检索我的原始 VideoExportThread 实例,以便识别正在运行的实例并查询其进度?

谢谢

最佳答案

为什么不简单地保留一个 Runnable 列表?

List<Runnable> runnables = new ArrayList<> ();
VideoExportThread r = new VideoExportThread(gcmPath);
runnables.add(r);
executor.submit(r);

还要注意 executor.submit(r); 返回一个 Future - 你可以调用它的 isDone() 方法来检查是否提交的任务仍在运行。


旁注:手动管理作业队列可能有充分的理由,但如果没有,您可以使用其中一种工厂方法来让您的生活更轻松。例如:ExecutorService executor = Executors.newCachedThreadPool();

关于java - 跟踪提交给 ThreadPoolExecutor 的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15341186/

相关文章:

java - 如何让程序等待设定的时间?

java - RejectedExecutionException 即使 ExecutorService 由 isShutdown() 保护

java - 如何检查jPanel是否被按下?

java Haversine公式(数学)NullPointerException错误问题

java - 如何更改线程的 Java 标签?

c - 增加 pthreads 线程数对速度没有影响

java - 使用 Java 通过 http 批量下载图像的好方法

java - "Single LIFO Executor"/Swing worker

java.awt.AWTError : Can't connect to X11 window server using ':0' as the value of the DISPLAY variable 错误

java - java中的synchronized block 是否真的获取整个对象锁?