Sono in procinto di progettare un'applicazione guidata da GUI Java che esegue una serie di attività separate, ciascuna all'interno della propria classe estesa SwingWorker. Questo è il design normale che utilizzo per eseguire attività sui propri thread e mantenere l'EDT libero per aggiornare la GUI. Ogni SwingWorker viene avviato sul proprio thread utilizzando un Executors.newCachedThreadPool.Java Swingworker e più thread
Tuttavia, all'interno di una particolare classe, è necessario un processo che richiede molto tempo per l'elaborazione. L'attività contiene un ciclo for che esegue alcuni calcoli fino a sei volte.
Ho pensato di implementare ciascuno dei sei calcoli all'interno della propria thread per accelerare i tempi di elaborazione, ma non sono sicuro del modo migliore di implementarlo.
È possibile estendere sia SwingWorker sia implementare Runnable, quindi utilizzare un metodo void Run() all'interno del ciclo for, avviare una nuova discussione ogni volta oppure utilizzare un cacheThreadPool.
O sto meglio usando solo l'implementazione Thread() standard?
Qualsiasi consiglio o suggerimento sarebbe apprezzato.
Grazie in anticipo
Josh
* "Ho avuto l'idea di implementare ciascuno dei sei calcoli all'interno della loro stessa thread per accelerare il tempo di elaborazione" * [sic] ... Questo tipo di calcolo parallelo per accelerare l'applicazione con CPU solo aumenta la velocità se la CPU su cui stai usando la tua app ha almeno 6 core disponibili per la tua app Java. Se hai solo, per esempio, due core, allora la generazione di 6 thread invece di due rallenterà davvero il tuo programma ... – TacticalCoder
Ah sì, questo ha perfettamente senso !! Grazie. –
@ user988052 che non ha alcun senso. Se hai thread x, non hai necessariamente bisogno di almeno x core per far funzionare il programma più velocemente. Finché ci sono più di 1 CPU logica disponibile per JVM, il sistema operativo cercherà di distribuire tali thread tra quelle CPU logiche. CPU più logiche - >> meno thread per CPU - >> finisce più velocemente. Può essere molto più complicato di quello (quando sono coinvolti alcuni blocchi, per esempio), lo so, ma di solito funziona in questo modo. –