Javaは一度に複数のEDTを作成できますか?イベントディスパッチスレッド(EDT)を2つ以上設定する方法はありますか?
私はEDTをセットアップすること、そして何百ものコンポーネントが組み込まれている可能性のある十数個のパネルを持つ「ヘビーデューティ」パネルの内容を更新する方法を実験しています。等々
Measuring "busyness" of the event dispatching thread
How does the event dispatch thread work?
Java Event-Dispatching Thread explanation
http://en.wiki2.org/wiki/Event_dispatching_thread
と:現在、私は次の記事で見てきた
public void run() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
panel.update();
}
});
}
を持っています。
1つのEDTが処理しなければならない数多くのイベントがある場合、Javaはすでにこれらのイベントをグループ化/優先順位付けするための内部スケジューリング機構を持っていることを理解しています。私は?
ウィルjavaの下に新しいスレッドを持つ第二EDT(新しいRunnableを(){...} .start()を作成した場合
http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html
"This is necessary because most Swing object methods are not "thread safe": invoking them from multiple threads risks thread interference or memory consistency errors."
によるだから何自動的にマージスレッドの安全性への恐怖のために戻って一から二EDTs?
new Thread(new Runnable() {
public void run() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
panel.update();
}
});
}
}).start();
あなたの2番目のスレッドはEDTではありません;) –
EDTを作成することはできません。スイングは独自のEDTを作成します。あなたは好きなだけ多くのスレッドを作成することができます(最大限の限界まで)が、彼らはEDTではありません。あなたのサンプルコードは 'Runnable'オブジェクトを作成しますが、あなたのスレッドで' panel.update'を実行しません。代わりに、このオブジェクトはどこかに保存されたSwingに渡され、最終的にEDTがそれを見つけて実行します。 – ajb
[Multiple Event Dispatch Threads]の可能な複製(http:// stackoverflow。com/questions/7323306/multiple-event-dispatch-threads) – Jayan