Il mio computer ha 4 core e sto eseguendo un programma Java swing gui. Quando eseguo la mia applicazione utilizza solo due core e circa il 30% di utilizzo della CPU. Ho un gran numero di file da elaborare e voglio dividerli in due thread per svolgere questa attività più velocemente utilizzando più cpu.Istanze di Swingworker non in esecuzione contemporaneamente
ho una classe SwingWorker chiamato PrepareTask, che ha un costruttore con due interi:
class PrepareTask extends SwingWorker<Void, Void> {
int start, end;
PrepareTask (int start, int end) { ... }
...
public Void doInBackground() {... }
public void done() { ... }
creo due istanze di questo come:
PrepareTask prepareTask = new PrepareTask(0,numberOfFiles/2);
prepareTask.execute();
PrepareTask prepareTask2 = new PrepareTask(numberOfFiles/2, numberOfFiles);
prepareTask2.execute();
Entrambi sono lanciati (sembra), ma quando è in esecuzione, posso vedere (stampare gli stmts) che la prima preparazione deve terminare (stampare gli stmts all'interno) prima che inizi il secondo. E l'utilizzo della CPU è lo stesso di prima, circa il 30%. Entrambi prendono naturalmente i dati dalla stessa fonte, un DefaultTableModel.
Qualche idea su come fare questo o quello che sto facendo male? grazie.
Si prega di notare che se la maggior parte del tempo di elaborazione comporta l'accesso ai file, quindi avere molti thread non renderà necessariamente più veloce perché il disco diventerà il collo di bottiglia. Puoi sviluppare ulteriormente il tipo di elaborazione che esegui su questi file? – jfpoilpret