私のコンピュータには4つのコアがあり、Java swing guiプログラムを実行しています。アプリケーションを実行すると、2つのコアと約30%のCPU使用率しか使用されません。私は処理するファイルが非常に多く、より多くのCPUを使用してこのタスクをより速く完了させるために、それらを2つのスレッドに分割したいと考えています。Swingworkerのインスタンスが同時に実行されていません
私は2つのintを持つコンストラクタを持つPrepareTask呼ばれるSwingWorkerのクラスを、持っている:
class PrepareTask extends SwingWorker<Void, Void> {
int start, end;
PrepareTask (int start, int end) { ... }
...
public Void doInBackground() {... }
public void done() { ... }
私はこのような2つのインスタンスを作成:(それが表示されます)の両方が起動されている
PrepareTask prepareTask = new PrepareTask(0,numberOfFiles/2);
prepareTask.execute();
PrepareTask prepareTask2 = new PrepareTask(numberOfFiles/2, numberOfFiles);
prepareTask2.execute();
をが、それが実行されるとき、私は、最初の準備が完了しなければならないことを見ることができます(print stmts)。そして、CPU使用率は以前と同じ約30%です。どちらももちろん、同じソースのデータを取得します(DefaultTableModel)。
これを行う方法や私が間違っていることはありますか?ありがとう。
処理時間の大部分がファイルアクセスに関係する場合、ディスクがボトルネックになるため、スレッドが多数あると必ずしも高速になるとは限りません。これらのファイルに対してさらに処理を行うことができますか? – jfpoilpret