首先讓我們來復習下一什么是多線程?
多線程是這樣一種機制,它允許在程序中并發執行多個指令流,每個指令流都稱為一個線程,彼此間互相獨立。
線程又稱為輕量級進程,它和進程一樣擁有獨立的執行控制,由操作系統負責調度,區別在于線程沒有獨立的存儲空間,而是和所屬進程中的其它線程共享一個存儲空間,這使得線程間的通信遠較進程簡單。
多個線程的執行是并發的,也就是在邏輯上“同時”,而不管是否是物理上的“同時”。如果系統只有一個CPU,那么真正的“同時”是不可能的,但是由于CPU的速度非常快,用戶感覺不到其中的區別,因此我們也不用關心它,只需要設想各個線程是同時執行即可。
多線程和傳統的單線程在程序設計上最大的區別在于,由于各個線程的控制流彼此獨立,使得各個線程之間的代碼是亂序執行的。
經過以上介紹,想必大家都已經回憶起當時寫多線程程序的痛苦。那么再讓我們回憶一下,Java中是如何實現多線程的吧。
作為一個完全面向對象的語言,Java提供了類 java.lang.Thread 來方便多線程編程,這個類提供了大量的方法來方便我們控制自己的各個線程。讓我們來看一看 Thread 類。Thread 類最重要的方法是 run() ,它為Thread 類的方法 start() 所調用,提供我們的線程所要執行的代碼。為了指定我們自己的代碼,只需要覆蓋它!
當然,除了以上這種方法,Java還提供了Runnable 接口。該接口只有一個方法 run(),我們聲明自己的類實現 Runnable 接口并提供這一方法,將線程代碼寫入其中,就完成了這一部分的任務。但是 Runnable 接口并沒有任何對線程的支持,我們還必須創建 Thread 類的實例,這一點通過 Thread 類的構造函數來實現。
我們已經習慣了以上兩種線程的方法,但是,Eclipse的swt卻不相同。如果按照我們以上的方法,當訪問swt的某一組件時,系統會拋出異常:org.eclipse.swt.SWTException: Invalid thread access 那么,在swt中,如保使用線程呢?
swt的display有兩種方式實現線程:asyncExec是線程異步的,syncExec是線程同步的。