什麼是事件分發執行緒

2021-08-13 16:17:20 字數 1732 閱讀 4859

序列

推測應是監聽模式,應是所有元件新增的***都註冊到了事件分發執行緒中,並在事件分發執行緒執行,但是訊息佇列是序列的導致耗時任務會拖慢swing介面

預設情況下,所有的awt或者基於swing的應用程式,都是開始於兩個執行緒的。其中乙個就是主線程,它處理main方法裡面的**。另外乙個執行緒,被稱作「事件分發執行緒」(event-dispatching thread),它負責處理事件、繪圖、和布局。在awt或者基於swing的程式中,所有的事件都是由***來處理的,而***正是在這個「事件分發執行緒」(event-dispatching thread)裡面收到事件的。舉例來說,你在actionperformed()方法裡面寫的**是自動在「事件分發執行緒」(event-dispatching thread)裡面被執行的(你不必為此作什麼事情)。而且,這對所有其他的事件處理方法都是成立的。正是由於這個原因,「事件分發執行緒」(event-dispatching thread)在swing和awt裡面具有極其重要的作用,這個執行緒在維護元件狀態和顯示方面扮演著乙個基礎性的角色。

和這個「事件分發執行緒」(event-dispatching thread)相關的就是乙個被叫做「系統事件佇列」system event queque乙個fifo佇列。這個佇列象別的佇列一樣,用先進先出的方式被填充。每個請求(就是事件)都用這個佇列的順序來執行事件處理**,而不管這個請求是否會更新元件的properties, layout, or painting。所有的事件都是乙個個的被序列處理的,之所以這麼作就是為了避免這中情況----元件在被重繪的過程中,其狀態被修改。所以說嘛,知道了這點,如果你想要在「事件分發執行緒」(event-dispatching thread)外再dispatch events時就要小心了。舉例來說,在乙個單獨的執行緒(無論時在main執行緒裡面,還是在你自己建立的執行緒)裡面,呼叫firexx()方法都是不安全的。

既然,「事件分發執行緒」(event-dispatching thread)要執行所有的***裡面的方法,painting, layou等,那麼event-handling, painting,以及layout等方法必須要快速執行,就變的相當的重要了。否則的話,這個「系統事件佇列」system event queue就會為了等待乙個事件處理,比方說repaint、layout,的完成而被堵塞,這樣你的應用程式看起來就僵住不動了。

注意:如果你對,你自己寫的event-handling**就是執行在這個「事件分發執行緒」(event-dispatching thread)裡面還有什麼不服的話,下面的這個靜態方法可以讓你閉嘴。

swingutilities.iseventdispatchthread().這個方法會返回true或者false來表明是否你的方法時在「事件分發執行緒」(event-dispatching thread)裡面被呼叫的。

為了說明這一點,我們假設,你現在有個swing程式,這個程式有個button和乙個存有資料的table。這個button被放上了actionlistener***,在這個actionlistener的actionperformed()方法裡面是資料庫訪問。在資料得到以後,資料被遞交給table的model,然後table也相應的更新它的顯示。那麼這樣的問題就是:如果當我們按下button時,連線資料庫很慢,或者根本就連線不上資料庫,或者從資料庫裡面得出了很多的資料以至於得花費一段時間來從資料庫傳來這些資料,這是問題就出現了,我們的gui就會變的相當的遲鈍,除非資料傳送完畢了,或者異常發生了,gui的相應才恢復快速。所以,如果想解決這個問題,保證actionperformed()方法可以執行的快點,你就需要自己建立乙個執行緒,用你自己的執行緒來作這件極其耗費事件的事。

EventBus事件分發的執行緒排程

在eventbus3.0之後,事件處理的方法名可以隨便取。但是需要新增乙個註解 subscribe,並且可以指定執行緒模型。eventbus中的4種treadmode 執行緒模型 posting 預設 事件在哪個執行緒發布出來的,事件處理函式就會在哪個執行緒中執行。事件處理使用此模式必須避免執行耗時...

什麼是事件分發機制?主要用來解決什麼問題?

在android開發中會經常遇到滑動衝突 比如scrollview或是sliddingmenu與listview的巢狀 的問題,需要我們深入的了解android事件響應機制才能解決,事件響應機制已經是android開發者必不可少的知識。面試找工作的時候也是面試官經常會問的乙個問題。1.涉及到事件響應...

什麼是執行緒?

python的全域性解釋鎖 注定 多執行緒 實際上 單執行緒 高併發 模擬 並行。效率高低 看具體應用場景。thread 是threading模組中最重要的類之一,可以使用它來建立執行緒。thread模組是比較底層的模組,threading模組是對thread做了一些包裝的,可以更加方便的被使用。另...