2015-12-18 2 views
0

Я бегу на работу в качестве фонового процесса с помощью Java 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() {..., но это прерывает исключения с перерывами.

Любые лучшие предложения. Заметьте, я не могу дождаться в методе done() {.., чтобы вызывать второй вызов, поскольку я делаю много вызовов и не уверен в количестве вызовов изначально. Пожалуйста, предложите, если есть хороший способ.

+0

ExecutorService лучше для этого случая – Jerry06

ответ

1

Вы можете использовать ExecutorService с пулом потоков фиксированного размера. Вы можете найти более подробную информацию о том, как установить правильный размер пула here

Вот что можно попробовать:

  1. Создать службу Исполнитель:

ExecutorService обслуживание = Executors.newFixedThreadPool (5) // установка произвольного значения в 5

  1. Создать вызываемый путем реализации интерфейса Callable

  2. Вызов Build_JobParams.runJob() в методе вызова.

  3. service.submit (/ ** представить экземпляр "Callable" здесь ** /)

Если Build_JobParams.runJob() не возвращает значение, которое вы также можете позвонить service.execute но в этом случае вам нужно создать Runnable.

Надеюсь, что это поможет!

+0

благодарит за вашу помощь @akki – Affi