91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Swing組件與外部線程的示例分析

發布時間:2021-12-28 09:29:02 來源:億速云 閱讀:141 作者:小新 欄目:編程語言

這篇文章主要介紹了Swing組件與外部線程的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

Swing組件與外部線程介紹,先總結下最常見的一個說法;

Swing是單線程的。

我的理解就是,一旦Swing組件被實現(setVisiable(true)/show()/pack()或者父組件已經被實現),所有改變組件狀態的代碼或者依賴于組件狀態的程序代碼,全部需要給EDT執行。在這之前可以由多少個線程調都無所謂。所有的Swing組件都認為只有EDT才會調用它們,為此組件的方法都是不做同步處理的。為什么這么做呢。在我的另一篇blog 中有提到worker thread模式,當只有一個worker thread時候,可省略掉共享互斥的開銷,極大的提高性能,這就是Event-dispatching thread的實質。它的具體作用大概歸納下。

1.會調用處理事件的listener
比如單擊一個button的時候,ActionEvent實例被放入到EventQueue中。EDT從EventQueue中獲取到這個事件,就會調用用來處理這個事件的listener中的actionPerformed方法。而這時候EDT是不知道 actionPerformed到底會做什么事情的,它僅僅是單純的去執行它而已。追溯上去,可以明白給一個Component注冊的Listener, 其實就是對Component設置當某個事件發生的時候,EDT所調用的方法所在的實例。

2.重繪畫面paint或者update
當我們想重繪畫面的時候,會去調用repaint.其實調用repaint并不是馬上去畫,而是記錄下要繪制的區域,具體的繪制還是由EDT操刀完成。revalidate也是類似。因此在組件被實現后,repaint,revalidate還有一大堆的 addXXXListener,removeXXXListener等都可被其他線程效用。


再總結下兩個非常重要的方法invokeAndWait和invokeLater,它們傳入參數都是Runnable對象。
invokeAndWait會等待Runnable執行完畢才返回。也就是,外部線程調用這個方法后,就會處于阻塞狀態,如果EventQueue還有其他的事件,需要它們全部被執行完成,這時候輪到EDT來執行Runnable對象,等它也執行完了,調用invokeAndWait的外部線程才會繼續活動。

invokeLater就耿直多了,直接把Runnable塞到EventQueue中就完事了,至于什么時候執行,看EDT有空沒有咯。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Swing組件與外部線程的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沈阳市| 光山县| 芦山县| 和平县| 即墨市| 新泰市| 和林格尔县| 安徽省| 奈曼旗| 花莲市| 洛宁县| 宜兰县| 宝山区| 雅江县| 霍城县| 池州市| 沁阳市| 恭城| 巴里| 芦溪县| 墨竹工卡县| 尚义县| 张家口市| 浮山县| 巨鹿县| 尤溪县| 尉犁县| 延长县| 武冈市| 元江| 团风县| 枣强县| 安多县| 芦溪县| 寻甸| 紫金县| 乌什县| 宜丰县| 华阴市| 永吉县| 洛扎县|