中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中的進程與線程的實現方法有哪些

發布時間:2020-11-21 16:30:15 來源:億速云 閱讀:169 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關java中的進程與線程的實現方法有哪些,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

一:進程與線程

概述幾乎任何的操作系統都支持運行多個任務,通常一個任務就是一個程序,而一個程序就是一個進程。當一個進程運行時,內部可能包括多個順序執行流,每個順序執行流就是一個線程

進程進程是指處于運行過程中的程序,并且具有一定的獨立功能。進程是系統進行資源分配和調度的一個單位。當程序進入內存運行時,即為

進程的三個特點:

1:獨立性:進程是系統中獨立存在的實體,它可以獨立擁有資源,每一個進程都有自己獨立的地址空間,沒有進程本身的運行,用戶進程不可以直接訪問其他進程的地址空間。

2:動態性:進程和程序的區別在于進程是動態的,進程中有時間的概念,進程具有自己的生命周期和各種不同的狀態

3:并發性:多個進程可以在單個處理器上并發執行,互不影響

并發性和并行性是不同的概念:并行是指同一時刻,多個命令在多個處理器上同時執行;并發是指在同一時刻,只有一條命令是在處理器上執行的,但多個進程命令被快速輪換執行,使得在宏觀上具有多個進程同時執行的效果

java中的進程與線程的實現方法有哪些

注:

線程:

線程是進程的組成部分,一個進程可以擁有多個線程而一個線程必須擁有一個父進程線程可以擁有自己的堆棧,自己的程序計數器和自己的局部變量,但不能擁有系統資源。它與父進程的其他線程共享該進程的所有資源

線程的特點:

線程可以完成一定任務,可以和其它線程共享父進程的共享變量和部分環境,相互協作來完成任務。

線程是獨立運行的,其不知道進程中是否還有其他線程存在。

線程的執行是搶占式的,也就是說,當前執行的線程隨時可能被掛起,以便運行另一個線程。

一個線程可以創建或撤銷另一個線程,一個進程中的多個線程可以并發執行。

二、線程的創建及使用

java使用Thread類代表線程,所有的線程對象都必須是Thread或者其子類的實例,每個線程的作用是完成一定任務,實際上是就是執行一段程序流(一段順序執行的代碼)

方案一:繼承Thread類創建線程類

步驟:① 定義Thread類的子類 并重寫該類的Run方法,該run方法的方法體就代表了該線程需要完成的任務

② 創建Thread類的實例,即創建了線程對象

③ 調用線程的start方法來啟動線程

java中的進程與線程的實現方法有哪些

java中的進程與線程的實現方法有哪些

java中的進程與線程的實現方法有哪些java中的進程與線程的實現方法有哪些

結論:使用繼承子Thread類的子類來創建線程類時,多個線程無法共享線程類的實例變量(比如上面的i)

方案二:實現Runnable接口

①定義Runnable接口的實現類,并重寫它的Run方法,run方法同樣是該線程的執行體

創建Runnable實現類的實例,并將此實例作為Thread的target創建一個Thread對象,該Thread對象才是真正的線程對象

調用start方法啟動該線程

java中的進程與線程的實現方法有哪些

java中的進程與線程的實現方法有哪些

結論:采用Ruunable接口的方式創建多個線程可以共享線程類的實例變量,這是因為在這種方式下,程序創建的Runnable對象只是線程的target,而多個線程可以共享一個target,所以多個線程可以共享一個實例變量

通過Runnable實現多線程其實就是將run包裝成線程的執行體,但是目前java無法將任意方法包裝成線程執行體

java中的進程與線程的實現方法有哪些java中的進程與線程的實現方法有哪些

方案三:使用callable和future創建線程Java5開始,Java提供 Callable接口,Callable接口提供了一個call()方法可以作為線程執行體,看起來和Runnable很像,但call()方法更強大——call()方法可以有返回值、call()方法可以拋出異常

Java5提供了Future接口來代表Callable接口的call()方法的返回值,并Future接口提供了一個FutureTask實現類,該實現類實現類Future接口,也實現了Runnable接口——可以作為Thread的target。

實現步驟:

①創建Callable接口的實現類,并實現call方法,call方法會成為線程執行體,且call方法具有返回值,在創建callable接口的實現類!

②使用FutrueTask類來包裝Callable對象,FutrueTask封裝類Callable的call方法的返回值

③使用FutrueTask對象作為Thread的target創建并啟動新線程

使用FutrueTask的get方法獲取執行結束后的返回值

java中的進程與線程的實現方法有哪些

java中的進程與線程的實現方法有哪些

java中的進程與線程的實現方法有哪些

結論:采取Runnable、Callable的優勢在于——線程類只是實現了Runnable或Callable接口,還可以繼承其它類;在這種方法下,多個線程可以共享一個target對象,因此非常適合多個相同線程處理同一份資源的情況,從而將CPU、代碼和數據分開,形參清晰的模型,體現了面對對象的編程思想。劣勢在于編程復雜度略高。

以上就是java中的進程與線程的實現方法有哪些,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

磐安县| 沙田区| 南漳县| 保德县| 泰和县| 奎屯市| 罗平县| 确山县| 萨迦县| 长岛县| 雅江县| 新巴尔虎左旗| 泽库县| 南安市| 平利县| 正定县| 纳雍县| 定西市| 芷江| 温泉县| 四子王旗| 宣武区| 丰县| 甘孜| 四川省| 怀来县| 类乌齐县| 阜康市| 晋宁县| 东山县| 定兴县| 仁布县| 岗巴县| 阜宁县| 景泰县| 邻水| 栖霞市| 门源| 卓尼县| 泸溪县| 荃湾区|