跟踪提交给ThreadPoolExecutor的任务

tis*_*shu 5 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);
}
Run Code Online (Sandbox Code Playgroud)

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

executor.submit(new VideoExportThread(gcmPath));
Run Code Online (Sandbox Code Playgroud)

我正在查询一种查询executor / blockingQueue的当前/待处理线程的方法。我试图使用jobQueue.toArray()和重写exe​​cutor方法,beforeExecute(Thread t, Runnable r)但是在两种情况下,返回的runnable都是FutureTask类型,它不包含太多数据。我是否可以使用它来检索我的原始VideoExportThread实例,以识别正在运行的实例并查询其进度?

谢谢

ass*_*ias 5

为什么不简单地列出您的Runnable?

List<Runnable> runnables = new ArrayList<> ();
VideoExportThread r = new VideoExportThread(gcmPath);
runnables.add(r);
executor.submit(r);
Run Code Online (Sandbox Code Playgroud)

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


旁注:可能有充分的理由手动管理作业队列,但如果没有,请使用一种工厂方法来简化工作。例如:ExecutorService executor = Executors.newCachedThreadPool();