2017-05-30 94 views
0

如果我在另一個線程上創建一個GUI,並確保發生在GUI上的任何更新都發生在該線程上並且該線程只是它是線程安全的嗎?我知道這很難確保,所以我有點問:與其他線程相比,EDT有什麼特別的/不同的東西?如果我在一個不是EDT的單線程上處理GUI,它仍然是線程安全的嗎?

請記住,我不是在問這個問題的良好實踐或其他解決方案,我問的是,如果在純粹的技術層面上,基本上是否像EDT那樣處理線程,是否會在GUI上創建GUI新線程可以安全使用?

+0

如果用戶在GUI上單擊鼠標,MouseEvent將在哪個線程上傳遞給MouseListeners? – VGR

+0

我會假定它總是被交付給EDT。我希望他們在大學裏提到這些東西。我的併發模塊有一位特別殘酷的講師......因此,爲了澄清,某些事件總是在美國東部時間完成的,無法控制它。對不起,如果這些都是愚蠢的問題順便說一句。 – DCON

+1

正確。事件調度線程由AWT系統控制。基於本地輸入的Java事件的創建是在內部完成的,它們被髮送到該線程。 – VGR

回答

1

它不是線程安全的,因爲您的進程不是唯一讀取/寫入UI元素的進程。 JRE也是可讀寫的,但它通過EDT來完成。因此,即使您在單線程中讀取/寫入非EDT,也有在EDT中執行的進程 - 所以最終只有一個UI元素,線程很少,沒有同步。

相關問題