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

标签 java multithreading swingworker

我正在使用 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(){ ...但它会间歇性地抛出异常。

还有什么更好的建议吗?请注意,我不能在 did() { .. 方法中等待调用第二个调用,因为我已经进行了多次调用并且不确定最初的调用次数。请问有什么好的办法吗?

最佳答案

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

以下是可以尝试的方法:

  1. 创建执行器服务:

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

  • 通过实现 Callable 接口(interface)创建可调用对象

  • 在call方法中调用Build_JobParams.runJob()。

  • service.submit(/** 在此处提交“Callable”实例 **/)

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

    希望这有帮助!!

    关于java - 在java swingworker后台线程中使用多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34352020/

    相关文章:

    java - 方法 verifyTrue(boolean) 未定义类型

    multithreading - 这种确保临界区不被中断的算法有什么问题?

    c# - 使用 Thread.Sleep() 总是不好的吗?

    Java Swingworker陆续更新GUI

    java - 重定向到新 URL 时小程序崩溃

    java - 使用停止按钮停止无限循环

    java线程简单愚蠢的程序

    java - DataOutputStream#writeBytes(String) 与 BufferedWriter#write(String)

    java - 不是文字的字符串对象不需要 new 关键字?

    c++ - 线程 id 分配有多整洁?