スレッドの制限については明確ではありません。Swing では、すべての GUI コンポーネントを EDT を通じて更新する必要があります。SwingWorker は長時間の操作のために Java6 で提供されており、done メソッドで GUI コンポーネントを更新できます。私の理解では、done() メソッドの GUI コンポーネントは EDT で更新されます。したがって、同期の問題は発生しません。しかし、ここにリンクテキスト
それは言います:
ImageRetriever クラスは画像をダウンロードして大きなラベルに配置するため、コンストラクターでラベルと画像の URL を指定すると便利です。ImageRetriever には、画像を取得するための URL が必要です。ImageRetriever インスタンスがラベルのアイコン自体を設定できるように、ラベルを提供します。内部クラスを使用する場合、ワーカー スレッドが情報に直接アクセスできるため、コンストラクターでこの情報を提供することさえできない場合があります。ただし、コンストラクターで情報を提供すると、その情報が ImageRetriever インスタンス間で共有されないため、アプリケーションをよりスレッドセーフにするのに役立ちます。
私はこれについて混乱しています。SwingWorker メソッドが EDT の GUI コンポーネント (リンクの例では JLabel) を更新する場合、ImageRetriever(=SwingWorker) インスタンス間でそれらを共有しない方がスレッドセーフである理由は何ですか? 複数の SwingWorker があり、done() メソッドで同じコンポーネントを更新する場合、更新に同期プリミティブを使用する必要がありますか? 私は何か誤解していますか?スレッドの制限は、1 つのスレッドだけがすべてのアクションを実行することを意味しませんか? swingworkers はスレッドに制限されていませんか?
ありがとう