5

Javaでは、オブジェクトのdoInBackground()メソッドを呼び出すスレッドの優先順位を設定する方法はありますか?SwingWorker

スレッドAPIにはsetPriority()メソッドがあります。このSwingWorker.execute()メソッドは、swingworkerがワーカースレッドで実行されるようにスケジュールします。そのワーカースレッドにアクセスして、優先度を設定したいと思います。

私の理解では、このワーカースレッドはデフォルトのワーカースレッドプールから来ています。これを処理する唯一の方法は、自分のエグゼキュータを使用することですか?

4

3 に答える 3

8

JDK7 SwingWorker javadocは、デザイナーがユーザーがバックグラウンドスレッドを直接操作したり変更したりすることを意図していないことを示唆しています。

... the exact strategy of choosing a thread for any particular SwingWorker is unspecified and should not be relied on.

SwingWorker.getWorkersExecutorService()の実装は、簡単に変更できない方法で実装しているため、このアイデアを強化しているようです。

SwingWorkerは、典型的なケースに対する定型的なソリューションであり、典型的なケースはありません。SwingWorkerをハックしてやりたいことをやろうとするのではなく、バックグラウンドタスクの実行を処理するコードを書くことをお勧めします。そうすれば、将来あなたのコードを維持する人は誰でも(おそらくあなた自身でさえ!)、SwingWorkerが期待どおりに動作しない理由を不思議に思うことはありません。

于 2012-04-16T18:50:46.567 に答える
6

これを行うために私が考えることができる唯一の方法は、executeメソッドに。を使用して現在のスレッドを取得させることThread.currentThread()です。次に、このスレッドの優先度を設定できます(呼び出し元が許可されている場合)。

于 2012-04-16T15:59:37.310 に答える
2

SwingWorkerはであるためRunnable、任意のユーザーに送信できますjava.util.concurrent.ExecutorService

于 2012-04-16T20:43:37.190 に答える