在 java swingworker 后台线程中使用多个线程

Using multiple threads inside java swingworker background thread

我正在 运行 工作作为后台进程使用 java swingworker

protected static class BackgroundTask extends SwingWorker<Void, Void> {
@Override
protected Void doInBackground() {
    //while (!isCancelled()) {
    Build_JobParams.runJob();
    //}
    return null;
}

现在,我需要使用不同的参数多次(异步)调用后台进程。由于它是后台进程,第二次调用将覆盖第一次调用参数。我尝试的一种方法是使用多个线程,例如 Thread t1 = new Thread(){ ... 但它会间歇性地抛出异常。

有什么更好的建议。请注意,我不能在 done() { .. 方法中等待调用第二次调用,因为我进行了多次调用并且不确定最初的调用次数。有什么好的方法请指教

您可以将 ExecutorService 与固定大小的线程池一起使用。您可以找到有关如何设置正确池大小的更多信息 here

以下是可以尝试的:

  1. 创建一个执行器服务:

ExecutorService service = Executors.newFixedThreadPool(5) // 将任意值设置为 5

  1. 通过实现 Callable 接口创建一个可调用对象

  2. 调用方法中调用Build_JobParams.runJob()

  3. service.submit(/** 在此处提交 "Callable" 的实例 **/)

如果 Build_JobParams.runJob() 没有返回任何值,您也可以调用 service.execute 但在那种情况下,您需要创建一个 Runnable。

希望对您有所帮助!!