Мой компьютер имеет 4 ядра, и я запускаю программу графического интерфейса Java Swing. Когда я запускаю свое приложение, оно использует только два ядра и около 30% загрузки ЦП. У меня есть большое количество файлов для обработки, и я хочу разделить их на два потока, чтобы выполнить эту задачу быстрее, используя больше процессора.
У меня есть класс SwingWorker с именем PrepareTask, в котором есть конструктор с двумя целыми числами:
class PrepareTask extends SwingWorker<Void, Void> {
int start, end;
PrepareTask (int start, int end) { ... }
...
public Void doInBackground() {... }
public void done() { ... }
Я создаю два экземпляра этого, например:
PrepareTask prepareTask = new PrepareTask(0,numberOfFiles/2);
prepareTask.execute();
PrepareTask prepareTask2 = new PrepareTask(numberOfFiles/2, numberOfFiles);
prepareTask2.execute();
Оба запускаются (появляются), но когда они запускаются, я вижу (печать stmts), что первая подготовка должна быть завершена (печать stmts внутри) до того, как начнется вторая. И загрузка процессора такая же, как и раньше, около 30%. Оба они, конечно, берут данные из одного и того же источника, DefaultTableModel.
Любые идеи о том, как это сделать или что я делаю неправильно? благодаря.