Мой компьютер имеет 4 ядра, и я запускаю программу Java swing gui. Когда я запускаю приложение, он использует только два ядра и около 30% загрузки процессора. У меня есть большое количество файлов для обработки и вы хотите разбить их на два потока, чтобы ускорить выполнение этой задачи с использованием большего количества процессоров.
У меня есть класс SwingWorker под названием PrepareTask, у которого есть конструктор с двумя ints:
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.
Любые идеи о том, как это сделать или что я делаю неправильно? спасибо.