與此線程相關的是一個事件的FIFO(First In First Out,先進先出)隊列:系統事件隊列(java.awt.EventQueue的一個實例)。跟所有的FIFO隊列一樣,系統事件隊列也是被線性填充的。無論是更新組件屬性,布局,或是重新繪制,每一個請求依次運行事件處理代碼。所有事件被依次處理是為了避免像某個組件的狀態在它重新繪制的中途被意外改變這樣的情況。知道這一點后,我們就要避免在事件發送線程之外去發送事件。比如說,在另一個線程中直接調用fireXX()方法就是不安全的。我們同時也必須保證事件處理代碼和繪制代碼盡快地執行完,否則整個系統隊列就會被阻塞,被迫等待某個事件被處理,重新繪制,或是布局完畢,而我們的應用程序則像是被“凍結”或是失去響應。 ============================================================================================== // Thanks to Matthew Robinson and Pavel Vorobiev, Ph.D for their great book Swing, this article is translated form // this book, 1st edition. You can find these text in their book (in English) of Chapter 2. =================================================================================
與此線程相關的是一個事件的FIFO(First In First Out,先進先出)隊列:系統事件隊列(java.awt.EventQueue的一個實例)。跟所有的FIFO隊列一樣,系統事件隊列也是被線性填充的。無論是更新組件屬性,布局,或是重新繪制,每一個請求依次運行事件處理代碼。所有事件被依次處理是為了避免像某個組件的狀態在它重新繪制的中途被意外改變這樣的情況。知道這一點后,我們就要避免在事件發送線程之外去發送事件。比如說,在另一個線程中直接調用fireXX()方法就是不安全的。我們同時也必須保證事件處理代碼和繪制代碼盡快地執行完,否則整個系統隊列就會被阻塞,被迫等待某個事件被處理,重新繪制,或是布局完畢,而我們的應用程序則像是被“凍結”或是失去響應。 ============================================================================================== // Thanks to Matthew Robinson and Pavel Vorobiev, Ph.D for their great book Swing, this article is translated form // this book, 1st edition. You can find these text in their book (in English) of Chapter 2. =================================================================================