Стандартный сценарий: пользователь нажимает кнопку и запускает большую задачу.EventThread создает SwingWorker
для выполнения задачи и продолжения жизни.
Теперь, поскольку большая задача имеет высокую степень распараллеливания, первое, что делает поток SwingWorker
, это создает группу рабочих потоков и фермработа.
Мой вопрос: разрешено ли рабочим потокам вызывать SwingWorker#publish()
для запуска обновления GUI
или это разрешено только потоку SwingWorker
?
Спасибо, Carsten
[Редактировать] Псевдокод, чтобы сделать мой пример использования более понятным.Вопрос в основном таков: приведенный ниже код в порядке?А что если я пропущу waitForAllWorkerThreadsToFinish();
?
public class MySwingWorker extends SwingWorker {
class MyWorkerThread extends Runnable {
void run() {
while(!exitCondition) {
doSomeWork();
publish(progressUpdate);
reEvaluateExitCondition();
}
}
}
public Void doInBackground() {
createAndStartBunchOfMyWorkerThreads();
waitForAllWorkerThreadsToFinish();
}
void process(List<V> chunks) {
updateGuiWithProgress(chunks);
}
}