測試必備之Java知識(四)—— 線程相關

線程相關

Java多線程實現方式

繼承Thread,實現Runnable接口,實現Callable接口(能拋異常且有返回值,不經常使用)網絡

爲何有了繼承Thread方式還要有Runnable接口方式

實現接口的方式適合多個相同程序代碼的線程去處理同一個資源,能夠避免Java中單繼承的限制多線程

爲何JVM啓動是多線程的?

由於至少啓動了兩個線程:主線程、垃圾回收線程併發

線程和進程的含義

進程:是操做系統資源分配的基本單位,正在運行的程序socket

線程:是任務調度和執行的基本單位,程序使用CPU的最基本單位spa

多線程和多進程的含義

多進程:操做系統能同時運行多個任務即程序操作系統

多線程:同一程序中有多個順序流在執行線程

併發和並行的含義

並行:邏輯上同時發生,一段時間內同時運行多個程序對象

併發:物理上同時發生,一個時間點同時運行多個程序blog

線程和進程的區別

不一樣點  進程 線程
一個進程裏有多個線程
內存 不共享內存 共享內存
資源 進程間共享文件網絡資源 線程間不共享
開銷 進程須要分配內存,開銷較大 線程只須要分配棧和一個PC,開銷較小
獨立 能夠獨立存在 能夠獨立,必須依賴進程而存在
做用 進程是CPU資源分配的最小單位 線程是CPU調度的最小單位
通訊 進程間的通訊比較複雜由於它的數據空間獨立性,須要經過操做系統,基於socket的進程間的通訊機制 而線程間的通訊因爲多線程共享地址空間和數據空間,可直接通訊,沒必要經過操做系統(內核的調度)

線程調度模型

分時調度模型:全部線程輪流使用CPU的使用權,平均分配每一個線程佔用CPU的時間片繼承

搶佔式調度模型:優先讓優先級高的線程使用CPU,得到CPU時間片也越多,Java使用此模型

線程間通訊——生產者消費者模式

生產者:先看是否有數據,有就等待消費者消費(wait),沒有就生產,生產完後通知消費者消費

消費者:先看是否有數據,有就消費,沒有就等待生產者生產,通知生產者生產數據(notify)

Java線程調度方式

線程睡眠:Thread.sleep(long millis),使線程轉換到阻塞狀態,當睡眠結束後,就轉爲就緒狀態

線程等待:Object.wait(),致使當前的線程等待,直到其餘線程調用此對象的notify()或notifyAll()

線程喚醒:Object.notify()方法,喚醒在此對象上等待的單個線程。

線程讓步:Thread.yield(),暫停當前正在執行的線程對象,把執行機會讓給相同或更高優先級的線程

線程加入:join(),等待其餘線程終止

線程狀態

初始狀態:建立一個線程

就緒狀態:線程調用start()方法

運行狀態:線程被CPU調度

阻塞狀態:放棄CPU使用權,暫停完畢後變回就緒狀態(同步阻塞,等待阻塞,其餘阻塞)

死亡狀態:線程執行完或因異常退出了run()方法,線程結束了生命週期

線程狀態轉換

相關文章
相關標籤/搜索