2013-01-23 18 views
5

La mia classe SwingWorker estesa esegue un'attività in background potenzialmente ricorrente che richiede le variabili di input di origine della GUI.Devo creare una nuova istanza di Java SwingWorker ogni volta che voglio richiamare doInBackground()?

vedo 2 opzioni di codifica:

  1. Per iniziare una nuova istanza della classe ogni volta che lo uso e passare le variabili al costruttore. Presumo che dovrei assicurarmi che ci siano non in molti casi. Se é cosi, come? multiton o qualche altro metodo?

  2. Aggiorna le variabili e richiama l'esecuzione? Se sì, come faccio a rendere sicuro di non interromperlo?

Una di queste opzioni è la strada da percorrere o c'è un modo migliore?

+0

che cosa è questa domanda rellated con multithreading, forse potrebbe essere importante per i potenziali risposte – mKorbel

+1

SwingWorker non è rientrante, che è, non è possibile eseguire di nuovo – MadProgrammer

risposta

3

uso Plase opzione 1.

oggetti immutabili sono normalmente più facili da lavorare. Ad esempio, si impedisce il problema che le variabili vengano aggiornate mentre il lavoratore sta ancora lavorando e si deve pensare meno alla visibilità della memoria.

L'istanziazione degli oggetti è piuttosto economica in Java, quindi questo non sarà un problema di prestazioni ed è possibile creare una nuova istanza ogni volta che ne ha bisogno.

+0

Grazie sarò approvare in 5 minuti quando sono permesso. Come posso misurare questa economicità? –

5

SwingWorker è un non-operatore, il che significa che non è possibile eseguirlo di nuovo, più o meno allo stesso modo dei thread.

Dalle JavaDocs

SwingWorker è progettato solo per essere eseguita una volta. L'esecuzione di uno SwingWorker più di una volta non comporterà il doppio del metodo doInBackground .

Problemi correlati