在 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
以下是可以尝试的:
- 创建一个执行器服务:
ExecutorService service = Executors.newFixedThreadPool(5) // 将任意值设置为 5
通过实现 Callable 接口创建一个可调用对象
调用方法中调用Build_JobParams.runJob()
service.submit(/** 在此处提交 "Callable" 的实例 **/)
如果 Build_JobParams.runJob() 没有返回任何值,您也可以调用
service.execute 但在那种情况下,您需要创建一个 Runnable。
希望对您有所帮助!!
我正在 运行 工作作为后台进程使用 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
以下是可以尝试的:
- 创建一个执行器服务:
ExecutorService service = Executors.newFixedThreadPool(5) // 将任意值设置为 5
通过实现 Callable 接口创建一个可调用对象
调用方法中调用Build_JobParams.runJob()
service.submit(/** 在此处提交 "Callable" 的实例 **/)
如果 Build_JobParams.runJob() 没有返回任何值,您也可以调用 service.execute 但在那种情况下,您需要创建一个 Runnable。
希望对您有所帮助!!