SwingWorkerのこれらの 2 つのメソッドは 、現時点で私を混乱させており、誤って使用するのは非常に簡単なようです。
メソッドpublish()は、次のことを説明します。
process(java.util.List) メソッドにデータ チャンクを送信します。このメソッドは、doInBackground メソッド内から使用され、プロセス メソッド内のイベント ディスパッチ スレッドで処理するための中間結果を提供します。
これが意味することは、ワーカー スレッドがそのdoInBackground()メソッドを実行している間に、「チャンク」を作成できることです (これらは特定のものである必要がありますか、それともメッセージ オブジェクトを参照するための単なる方法ですか?)。私のSwing GUIで処理するため。
それは私をprocess()に導きます。javadoc では、次の概要が説明されています。
イベント ディスパッチ スレッドで、publish メソッドからデータ チャンクを非同期的に受信します。
両方の方法のドキュメントに目を通した後、これがどのように行われているかの背後にあるメカニズムを誰かが明確にすることができますか? ドキュメントによると非同期プロセスであることは理解していますが、EDT で行われているため、ある程度の予測可能性があると思います。
publish()
ドキュメントには次のように記載されています。
プロセス メソッドはイベント ディスパッチ スレッドで非同期的に呼び出されるため、プロセス メソッドが実行される前に、パブリッシュ メソッドへの複数の呼び出しが発生する可能性があります。パフォーマンス上の理由から、これらの呼び出しはすべて、連結された引数を持つ 1 つの呼び出しに結合されます。
要約すると、私の質問は 2 つあります。
- 誰が電話する必要があり
process()
ますか? process()
SwingWorker と EDT のコンテキストでのワークフローは何ですか?
説明が必要な場合はお知らせください。