2016-10-24 18 views
0

スレッド優先度を指定せずにJava Swingアプリケーションを作成すると、イベントディスパッチスレッドはメインスレッドよりも高い優先度で実行されますか?これは、メインスレッドがイベントディスパッチスレッドを決して中断しないことを保証するものではないことを理解します。Swingイベントディスパッチスレッドは、メインスレッドよりも高い優先順位で実行されますか?

答えて

2

なぜこの仮定をしたいと思いますか?

Swingのルールは、GUIを更新するすべてのコードがEDT上で実行され、Swingコンポーネントに対するすべての更新が順番に行われることです。

このルールの理由は、スレッドが中断されたときを制御できないため、同じGUIコンポーネントを別のスレッドで更新しないようにするため、コンポーネントが矛盾した状態になることがあります。複製することができないランダムな問題が発生します。

+0

このルールの理由は、Swingでの同期方法が大幅に回避されるためです。 – EJP

2

はい。 5 == Thread.NORM_PRIORITY10 == Thread.MAX_PRIORITYこと

5 
6 

注:

import java.awt.EventQueue; 

public class Test { 

    public static void main(String[] args) { 
     System.out.println(Thread.currentThread().getPriority()); 
     EventQueue.invokeLater(() -> { 
      System.out.println(Thread.currentThread().getPriority()); 
     }); 
    } 
} 

出力:

EDTは、ここでは実績のあるメインスレッドよりも高い優先度で実行されます。

+0

ありがとうございます。しかし、あなたがこれを1つの実装で真実であると示している間に、私はjavadocで何も見つけることができず、これがすべての実装に当てはまることを保証します。 –

+0

@espertus:あなたはそうではないでしょう –

+0

@HovercraftFullOfEels次に、私は答えが「多分」で、「はい」ではないと思います。 –

関連する問題