java thread類詳解 handlerthread與handler區(qū)別?
handlerthread與handler區(qū)別?①Handl對于多核CPU java中() 指的是哪個核上的線程?Java和線程類庫沒有提供任何API來獲取CPU的核心信息。如上圖所示,java使用操
handlerthread與handler區(qū)別?
①Handl
對于多核CPU java中() 指的是哪個核上的線程?
Java和線程類庫沒有提供任何API來獲取CPU的核心信息。
如上圖所示,java使用操作系統(tǒng)的輕量級進程接口實現(xiàn)線程,輕量級進程與內(nèi)核線程一一對應。內(nèi)核線程由操作系統(tǒng)調(diào)度,并分配給CPU內(nèi)核執(zhí)行。換句話說,java虛擬機不會直接調(diào)用CPU,而是將任務提交給操作系統(tǒng),由CPU的哪個內(nèi)核來執(zhí)行線程。
在大多數(shù)情況下,java程序不支持。;不需要關心線程是由哪個CPU內(nèi)核執(zhí)行的,因為java程序可以 除非使用JNI調(diào)用一些低級操作,否則對操作系統(tǒng)的線程調(diào)度沒有任何影響。在這種情況下,你可以 不要通過java 自己的線程類庫。
如何理解應用Java多線程與并發(fā)編程?
多線程:在理解線程之前,你應該知道進程的概念。進程是一個程序的運行活動,它具有關于數(shù)據(jù)集的獨立功能。簡單來說,進程就是一個正在執(zhí)行的程序活動,是一個活動的實體。多流程就像同時打開Word、Excel、Visio。都是不同的程序運行活動,也就是多個進程同時啟動。這個概念比較好理解。線程是為正在執(zhí)行的程序活動(即進程)的多個執(zhí)行路徑執(zhí)行調(diào)度的單元。線程是在一個進程的基礎上存在的,在這個進程下,它們可以共享進程的內(nèi)存,擁有自己的內(nèi)存空間。這個內(nèi)存空間,也叫線程棧,是線程建立時系統(tǒng)分配的,主要用來保存線程內(nèi)部使用的數(shù)據(jù)。多線程意味著一個進程下有多個線程。每個線程執(zhí)行自己的任務,這些線程可以 "同時做這件事(此處加雙引號,下面會說明加雙引號的原因)。多線程有什么好處?多線程應用在生活中隨處可見,Word文檔就是一個很好的例子。Word有 "背景打印 "。點擊打印按鈕后,如果用戶發(fā)現(xiàn)可以修改當前文本,可以在打印過程中返回主界面進行修改并保存。如果沒有應用多線程,可能會假設用戶要打印的文本很長,所以用戶只能在打印操作完成后才能修改、編輯和保存文本,這樣用戶體驗不是。和多線程一樣好。還有打雷。有沒有發(fā)現(xiàn)迅雷可以同時下載東西?比如同時下載A、B、A為53.4%,下載B為47.1%。有時候A更快,有時候B更快。反正A和B在下載內(nèi)容是肯定的,不用等A下載完,B就可以開始下載了,這也是多線程的作用。因此,多線程強調(diào) "同時,一起 "而不是單一的順序操作。
并發(fā):Concurrency,就是并發(fā)的意思。并發(fā)的本質(zhì)是一個物理CPU(或多個物理CPU)在幾個程序(或線程)之間復用,并發(fā)是強制多用戶共享有限的物理資源以提高效率。微觀視角:所有并發(fā)處理都有排隊等待、喚醒、執(zhí)行等步驟。顯微鏡下都是按順序加工的。如果請求(或線程)同時到達,它們將根據(jù)不同的優(yōu)先級進入隊列執(zhí)行。從宏觀上看,幾乎同時到達的多個請求(或線程)似乎同時被處理。一般來說,并發(fā)是指只有一個CPU資源,程序(或線程)要競爭執(zhí)行機會。圖中第一階段,在A執(zhí)行的過程中不會執(zhí)行B和C,因為這段時間這個CPU資源已經(jīng)被A競爭了。類似地,只有B在第二階段執(zhí)行,只有C在第三階段執(zhí)行。其實在并發(fā)過程中,A、B、C并不是同時進行的(微角度)。但同時(宏觀角度)。
并行性:并行性是指兩個或兩個以上的事件(或線程)同時發(fā)生,也就是不同的事件或線程同時在不同的CPU資源(多核)上執(zhí)行。并行,沒有并發(fā)之類的競爭和等待的概念。圖中A、B、C都在同時運行(微觀和宏觀)。
通過多線程實現(xiàn)并發(fā)和并行:java中的Thread類定義了多線程,可以實現(xiàn)并發(fā)或者并行。當CPU繁忙,資源不足時(啟動了很多進程),操作系統(tǒng)只把僅有的CPU資源分配給一個有多個線程的進程,這些線程會盡量為自己搶占盡可能多的時間片。這是通過多線程來實現(xiàn)并發(fā),線程會爭奪CPU資源來獲得執(zhí)行機會。當CPU資源充足時,一個進程中的多線程可以分配給不同的CPU資源,就是通過多線程實現(xiàn)并行。至于多線程是并發(fā)還是并行?如上所述,編寫的多線程可以分配給CPU內(nèi)核執(zhí)行,也可以分配給不同的CPU執(zhí)行。分配過程由操作系統(tǒng)完成,不能人為控制。所以,如果有人問我寫的多線程是并發(fā)的還是并行的?我會說,它 一切皆有可能。無論是并發(fā)還是并行,都提高了程序?qū)PU資源的利用率,最大化善用CPU資源。