Java線程和進程
1 進程和線程
進程:
進程是并發執行程序在執行過程中,資源分配和管理的基本單位。
進程可以理解為一個應用程序的執行過程,應用程序一旦執行,就是一個進程。
線程:
線程是進程的一個執行單元,是進程內可調度實體。
線程是比進程更小的獨立運行的基本單位。
線程也被稱為輕量級進程。
二者的區別:
名稱
進程
線程
地址空間
不同的進程之間的地址空間是獨立的
同一進程的所有線程共享本進程的地址空間
資源擁有
進程之間的資源是獨立的,無法共享
同一進程的所有線程共享本進程的資源
執行過程
每一個進程可以說就是一個可執行的應用程序
線程不能夠獨立執行,必須依存在應用程序中
2 創建線程的五種方式
2.1 繼承Thread類
通過繼承Thread并且重寫其run()方法,run方法中定義需要執行的任務。
創建后的子類通過調用start()方法即可執行線程方法。
注意:通過繼承Thread實現的線程類,多個線程間無法共享線程類的實例變量。需要創建不同Thread對象,自然不共享資源。
2.2 實現 Runnable 接口
需要先定義一個類實現 Runnable 接口并重寫該接口的 run() 方法,此run方法是線程執行體。
接著創建Runnable實現類的對象,作為創建Thread對象的參數target,此Thread對象才是真正的線程對象。
利用實現Runnable接口的線程類創建對象,可以實現線程之間的資源共享。
2.3 實現Callable 接口實現帶有返回值的線程
Callable接口如同Runnable接口的升級版,其提供的call()方法將作為線程的執行體,同時允許有返回值。
Callable對象不能直接作為Thread對象的target,因為Callable接口是JAVA5新增接口,不是Runnable接口的子接口。
對于這個問題的解決方案,就引入Future接口,此接口可以接受call()的返回值,RunnableFuture接口是Future接口和Runnable接口的子接口,可以作為Thread對象的target
2.4 繼承TimerTask
Timer 和 TimerTask 可以作為實現線程的另一種方式。
Timer 是一種線程設施,用于安排以后在后臺線程中執行的任務。可安排任務執行一次,或者定期重復執行,可以看成一個定時器,可以調度TimerTask。
TimerTask 是一個抽象類,實現了Runnable接口,所以具備了多線程的能力。
2.5 通過線程池啟動多線程
通過Executors 的工具類可以創建線程池。
提高系統響應速度,當有任務到達時,通過復用已存在的線程,無需等待新線程的創建便能立即執行。
降低系統資源消耗,通過重用已存在的線程,降低線程創建和銷毀造成的消耗。
方便線程并發數的管控,因為線程若是無限制的創建,可能會導致內存占用過多而產生OOM,并且會造成CPU過渡切換。
2.5.1 線程池一:FixThreadPool(int n)固定大小的線程池
2.5.2 線程池二:SingleThreadPoolExecutor 單線程池
單線程串行執行任務,確保任務按提交順序執行;
當線程異常結束后,會有新的線程代替之前的線程。
2.5.3 線程池三:CachedThreadPool() 緩存線程池
線程池數量不固定,可以達到最大值。
線程可被重復利用和回收。
2.5.4 線程池四:newScheduledThreadPool()
創建一個周期性的線程池,支持定時及周期性執行任務
創建線程時,指定核心線程數,當執行任務較多超過核心線程時,可額外啟動新的線程;
當任務恢復后,僅保留核心線程,其它額外線程將被關閉。
2.5.5 線程池五:newWorkStealingPool 新的線程池類 ForkJoinPool 的擴展
JDK1.8新增加
任務竊取線程池,線程有屬于自己的隊列,更加適用于多核心處理器。
3 Thread類和Runnable接口區別
實現Runnable接口,避免多繼承局限;
實現Runnable接口,可以更好的體現資源、數據共享的概念;
Thread類也是Runnable接口的實現類。
4 線程start和run方法的區別
直接調用線程類下的run方法,并不會啟動線程,只是作為普通方法來執行;
如果要啟動線程來執行,必須要調用 start 方法。
5 線程的優先級
Java線程的優先級范圍是1-10,默認優先級是5,10最高;
線程的優先級仍然無法保障線程的執行次序;
優先級高的線程獲取CPU資源的概率較大,優先級低的也并非沒機會執行;
主線程main的優先級是5。
Java 任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。