int 変数をインクリメントし、その値を JLabel に表示する gui を使用した単純な JAVA プログラムがあります。run メソッドが単純に実行する Runnable クラスで EventQueue.invokeLater() を呼び出して、JLabel を適切に (スレッドセーフに) 更新するための新しいスレッドを作成します。
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
label.setText("" + number);
}
});
プログラムを実行すると、予想どおり、ラベルの番号が 1 から約 5000 に急速に増加し始めますが、その後速度が低下し始め、100255、173735、235678 などのラベルの更新と、ブロックされた GUI によるそれらの間の大きな一時停止が見られ始めます。しかし、EventQueue.invokeLater() を使用せずにコンパイルすると、直接呼び出すだけでlabel.setText("" + number);
すべてが正常に機能し、ラベルの各番号が非常に速く変化することがわかります。しかしもちろん、その場合、私のメソッドはスレッドセーフではないことに気付きます。
どうしたの?EventQueue の動作が遅いか何かのように思えます。