多執行緒併發實踐 筆記 第九章

2021-06-18 11:39:23 字數 1462 閱讀 2244

gui應用程式

1.gui是單執行緒化的

《1》建立了乙個事件派發執行緒專門處理gui事件

《2》容易產生介面假死的現象

《3》swingutilties.iseventdispatcherthread判斷是否在事件分派執行緒中被呼叫

《4》swingutilties.invokeandwait,使得runnable任務在在事件分派執行緒中執行,並且阻塞當前執行緒(只能在非gui執行緒中呼叫)

《5》事件分派執行緒類似乙個單執行緒化的executor

2.短期的gui任務

《1》短期的任務可以吧全部動作留在事件執行緒中完成,耗時較長的任務則應該吧負載分壓都另乙個執行緒中

《2》fierxx方法不會提交到事件執行緒佇列,而是執行對應的事件***,所以只能在事件執行緒中呼叫

3.耗時的gui任務

《1》使用其他執行緒來執行耗時的任務,並將任務執行完後把相關的介面更新任務提交給事件分派執行緒

《2》使用future的cancel方法並且把引數ifmayinterrupte設定為true,如果執行的任務是可以可以相應中斷的,(如在任務執行的過程中適時檢查當前執行緒的中斷狀態),那麼久可以對耗時任務進行取消

《3》進度與完成標識:

重寫futuretask中的的call和done方法,使得任務的執行和執行完成後執行指定操作(耗時任務在執行完成後才執行介面更新,需要提交給事件分派執行緒)

重寫future中的setprogress方法使得任務進度以數字話顯示。

可取消任務的例子:使用futruetask物件來執行任務,使得任務可獲得結果和取消,在按鈕開始執行任務後改變listener使得當前事件處理是取消任務,在任務完成後使得當前事件處理函式為執行計算操作。

4.共享資料模型:

《1》執行緒安全的資料模型:

當資料模型支援精細的併發時,事件分派執行緒和後台執行緒就可以共享他,使得響應性問題不存在。但是資料模型的更新時必須生成事件以更新檢視。,並且不能提供一致性的資料快照

使用版本化資料模型,如copyonwritearraylist,該list在使用cowiterator作為迭代器,無法再迭代時修改原物件,而寫操作則把當前list的array生成副本以供修改,修改完畢後吧原list指向陣列的指標該為指向修改後的陣列,以確保執行緒安全,使用於讀操作多於寫操作的情況。

《2》分拆資料模型

應用程式的模型既包含表現域又包含應用域則成為分拆資料模型(如tablemodel即用於儲存顯示資料,又受控於應用程式)

表現模型被控制在事件分派執行緒當中,並且嵌入對共享資料模型的***,在共享模型更新時對變現模型通知。要注意的是:頻繁更新情況或資料量大得情況底下,對模型的連續更新比更新整個資料模型高效(在實現多執行緒共線乙個資料模型遇到困難的情況下適用)

第九章(筆記)

轉移指令是可以修改ip,或同時修改cs和ip的指令 offset 是用於提取標號偏移位址的操作符 jmp在第2章裡說到時用於修改ip或同時修改cs和ip的轉移指令,這章裡單獨的jmp指令是乙個無條件的轉移指令 jmp short 標號 是實現段內短轉移 jmp near ptr 標號 是實現段內近轉...

第九章作業

班級 0401304 學號 2013211526 姓名 鄧小俊 2.身份驗證 依據使用者所提供的身份資訊,來進行登入驗證,可以再細分為使用者是否可以登入sql sever 使用者是否可以登入到指定的目標資料庫等。授權 已通過身份驗證的使用者,檢查其所被賦予的許可權,是否可以訪問或者執行目標的物件 3...

第九章 引用

引用擁有指標的所有功能,只是語法更加的簡單 1 引用就是別名,變數的另外乙個名字,變數和別名它們的位址是一樣的,操作別名就是操作變數 2 引用就是別名常量,一旦引用被初始化就不能再改變了 可以理解為指標常量,指向的值不能改變,能改變的只是它的該位址處的值 3 引用物件huamn mike human...