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()和重写executor方法,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);
Run Code Online (Sandbox Code Playgroud)
还要注意,executor.submit(r);返回Future-您可以调用其isDone()方法来检查提交的任务是否仍在运行。
旁注:可能有充分的理由手动管理作业队列,但如果没有,请使用一种工厂方法来简化工作。例如:ExecutorService executor = Executors.newCachedThreadPool();。