Considerate seguente codice:Esecuzione di un ExecutorService all'interno di SwingWorker è una buona pratica?
SwingWorker<Void, Void> sworker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
ExecutorService executor = Executors.newFixedThreadPool(5);
try {
for (int j = 0; j < 5; j++) {
Callable<Object> worker = new MyCallableImpl();
Future<Object> future = executor.submit(worker);
array[j] = future.get();
}
} catch (InterruptedException e) {
// some code here
} catch (ExecutionException e) {
// some code here
}
// some code here
executor.shutdown();
return null;
}
};
sworker.execute();
Come ho detto nel titolo: si tratta di una buona pratica per invocare ExecutorService all'interno doInBackground() metodo di SwingWorker? Funziona per me (JDK1.7), la GUI non è bloccata e più thread dal pool Executor sono in esecuzione in background, ma ho ancora qualche dubbio ...
Sì, lo so, ma voglio eseguire più thread (Callables) all'interno di SwingWorker. Come posso farlo senza involucro non necessario Executor all'interno di SwingWorker? – DoktorNo
Mi piacerebbe sbarazzarmi del tutto di "SwingWorker" allora. Se una qualsiasi di queste attività modifica i componenti Swing, avvolgere la chiamata usando 'SwingUtilities.invokeLater' – mre
Sì, stanno modificando i componenti Swing (il codice non viene mostrato, per evitare confusione). Proverò la tua soluzione nel frattempo. – DoktorNo