【问题标题】:Using multiple threads inside java swingworker background thread在java swingworker后台线程中使用多个线程
【发布时间】:2015-12-18 09:10:31
【问题描述】:

我正在使用 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 更适合这种情况

标签: java multithreading swingworker


【解决方案1】:

您可以将 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。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    相关资源
    最近更新 更多