wait
sleep
join
yield
線程
是操作系統(tǒng)能夠進行運算調(diào)度的最小單位,它被包涵在進程之中,是行程中的實際運作單位。一條線程是進程中一個有序的事件流,一個進程中可以并行多條線程,每條線程并行執(zhí)行不同的任務。
進程
進程是指運行中的應用程序,每一個進程都有自己獨立的內(nèi)存空間。一個應用程序可以同時啟動多個進程。
(是一個正在執(zhí)行的程序;計算機中正在運行的程序?qū)嵗豢梢苑峙浣o處理器并由處理器執(zhí)行的一個實體;由單一順序的執(zhí)行顯示,一個當前狀態(tài)和一組相關的系統(tǒng)資源所描述的活動單元)
進程和線程的主要區(qū)別
每個進程都需要操作系統(tǒng)為其分配獨立的內(nèi)存地址空間,而同一進程中的所有線程在同一塊地址空間中工作,這些線程可以共享同一塊內(nèi)存和系統(tǒng)資源,比如共享一個對象或者共享已經(jīng)打開的一個文件。
線程池
創(chuàng)建多個線程不光麻煩而且相對影響系統(tǒng)性能。
背景(為什么用)
在面向?qū)ο缶幊讨?,?chuàng)建和銷毀對象是很費時間的,因為創(chuàng)建一個對象要獲取內(nèi)存資源或者其它更多資源。在Java中更是如此,虛擬機將試圖跟蹤每一個對象,以便能夠在對象銷毀后進行垃圾回收。所以提高服務程序效率的一個手段就是盡可能減少創(chuàng)建和銷毀對象的次數(shù),特別是一些很耗資源的對象創(chuàng)建和銷毀。如何利用已有對象來服務就是一個需要解決的關鍵問題,其實這就是一些"池化資源"技術(shù)產(chǎn)生的原因。比如大家所熟悉的數(shù)據(jù)庫連接池正是遵循這一思想而產(chǎn)生的,本文將介紹的線程池技術(shù)同樣符合這一思想。
優(yōu)點
1)避免線程的創(chuàng)建和銷毀帶來的性能開銷。
2)避免大量的線程間因互相搶占系統(tǒng)資源導致的阻塞現(xiàn)象。
3)能夠?qū)€程進行簡單的管理并提供定時執(zhí)行、間隔執(zhí)行等功能。
組成部分
1、線程池管理器(ThreadPoolManager):用于創(chuàng)建并管理線程池
2、工作線程(WorkThread): 線程池中線程
3、任務接口(Task):每個任務必須實現(xiàn)的接口,以供工作線程調(diào)度任務的執(zhí)行。
4、任務隊列:用于存放沒有處理的任務。提供一種緩沖機制。
功能
應用程序可以有多個線程,這些線程在休眠狀態(tài)中需要耗費大量時間來等待事件發(fā)生。其他線程可能進入睡眠狀態(tài),并且僅定期被喚醒以輪循更改或更新狀態(tài)信息,然后再次進入休眠狀態(tài)。為了簡化對這些線程的管理,一個線程池有若干個等待操作狀態(tài),當一個等待操作完成時,線程池中的輔助線程會執(zhí)行回調(diào)函數(shù)。線程池中的線程由系統(tǒng)管理,我們就不需要費力于線程管理,可以集中精力處理應用程序任務。