多執行緒原理實現
執行緒狀態
在一個執行緒的生存期內,可以在多種狀態之間轉換。不同作業系統可以實現不同的執行緒模型,定義許多不同的執行緒狀態,每個狀
態還可以包含多個子狀態。但大體說來,如下幾種狀態是通用的:
就緒:參與排程,等待被執行。一旦被排程選中,立即開始執行。
執行:佔用CPU,正在執行中。
休眠:暫不參與排程,等待特定事件發生。
中止:已經執行完畢,等待回收執行緒資源(要注意,這個很容易誤解,後面解釋)。
執行緒環境
執行緒存在於程式之中。程式內所有全域性資源對於內部每個執行緒均是可見的。
程式內典型全域性資源有如下幾種:
程式碼區。這意味著當前程式空間內所有可見的函式程式碼,對於每個執行緒來說也是可見的。
靜態儲存區。全域性變數。靜態變數。
動態儲存區。也就是堆空間。
執行緒內典型的區域性資源有:
本地棧空間。存放本執行緒的函式呼叫棧,函式內部的區域性變數等。
部分暫存器變數。例如本執行緒下一步要執行程式碼的指標偏移量。
可會合(joinable)。這種關係下,主執行緒需要明確執行等待操作。在子執行緒結束後,主執行緒的等待操作執行完畢,子執行緒
和主執行緒會合。這時主執行緒繼續執行等待操作之後的下一步操作。主執行緒必須會合可會合的子執行緒,Thread類中,這個操作通過
在主執行緒的執行緒函式內部呼叫子執行緒物件的wait()函式實現。這也就是上面加上三個wait()呼叫後顯示正確的原因。必須強調的
是,即使子執行緒能夠在主執行緒之前執行完畢,進入終止態,也必需顯示執行會合操作,否則,系統永遠不會主動銷燬執行緒,分配
給該執行緒的系統資源(執行緒id或控制程式碼,執行緒管理相關的系統資源)也永遠不會釋放。
相分離(detached)。顧名思義,這表示子執行緒無需和主執行緒會合,也就是相分離的。這種情況下,子執行緒一旦進入終止態
,系統立即銷燬執行緒,回收資源。無需在主執行緒內呼叫wait()實現會合。Thread類中,呼叫detach()使執行緒進入detached狀態。
這種方式常用線上程數較多的情況,有時讓主執行緒逐個等待子執行緒結束,或者讓主執行緒安排每個子執行緒結束的等待順序,是很困
難或者不可能的。所以在併發子執行緒較多的情況下,這種方式也會經常使用。
預設情況下,建立的執行緒都是可會合的。可會合的執行緒可以通過呼叫detach()方法變成相分離的執行緒。但反向則不行。
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/cute810326/archive/2009/08/06/4417976.aspx
相關文章
- 如何實現多執行緒執行緒
- java多執行緒原理Java執行緒
- 深入理解多執行緒(一)——Synchronized的實現原理執行緒synchronized
- 多執行緒知識梳理(7) ConcurrentHashMap 實現原理執行緒HashMap
- 多執行緒實現多工二執行緒
- 多執行緒實現多工一執行緒
- 執行緒池的實現原理執行緒
- 執行緒屏障CyclicBarrier實現原理執行緒
- Java多執行緒實現方式Java執行緒
- 多執行緒具體實現執行緒
- Java多執行緒的實現Java執行緒
- JavaScript如何實現多執行緒?JavaScript執行緒
- Runnable介面實現多執行緒執行緒
- python多執行緒實現Python執行緒
- NSThread實現多執行緒thread執行緒
- NSThread多執行緒實現thread執行緒
- 【多執行緒】ThreadLocal原理執行緒thread
- 多執行緒:原理分析整理執行緒
- 多執行緒同步的原理執行緒
- 多執行緒-匿名內部類的方式實現多執行緒程式執行緒
- 執行緒池ThreadPoolExecutor實現原理執行緒thread
- java多執行緒:執行緒池原理、阻塞佇列Java執行緒佇列
- 多執行緒爬蟲實現(上)執行緒爬蟲
- java實現多執行緒的方法Java執行緒
- 面試-實現多執行緒的方式面試執行緒
- Java多執行緒的實現方法Java執行緒
- Java多執行緒之---用 CountDownLatch 說明 AQS 的實現原理Java執行緒CountDownLatchAQS
- 多執行緒-多執行緒方式1的程式碼實現執行緒
- Java 執行緒池的原理與實現Java執行緒
- SpringBoot執行緒池和Java執行緒池的實現原理Spring Boot執行緒Java
- 用多執行緒,實現併發,TCP執行緒TCP
- 多執行緒伺服器的實現執行緒伺服器
- 多執行緒基礎-基礎實現執行緒
- Java多執行緒【三種實現方法】Java執行緒
- 純Mutex實現多執行緒交替列印Mutex執行緒
- 用Pthread實現多執行緒操作thread執行緒
- Java多執行緒-基礎及實現Java執行緒
- Swift實現多執行緒map函式Swift執行緒函式