您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java中線程Thread的特點及使用方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java中線程Thread的特點及使用方法是什么”吧!
線程:線程是進程的組成部分,一個進程可以擁有多個線程,而一個線程必須擁有一個父進程。線程可以擁有自己的堆棧,自己的程序計數器和自己的局部變量,但不能擁有系統資源。它與父進程的其他線程共享該進程的所有資源。
線程可以完成一定任務,可以和其它線程共享父進程的共享變量和部分環境,相互協作來完成任務。
線程是獨立運行的,其不知道進程中是否還有其他線程存在。
線程的執行是搶占式的,也就是說,當前執行的線程隨時可能被掛起,以便運行另一個線程。
一個線程可以創建或撤銷另一個線程,一個進程中的多個線程可以并發執行。
java使用Thread類代表線程,所有的線程對象都必須是Thread或者其子類的實例,每個線程的作用是完成一定任務,實際上是就是執行一段程序流(一段順序執行的代碼)
步驟:
1.定義Thread類的子類 并重寫該類的Run方法,該run方法的方法體就代表了該線程需要完成的任務
2.創建Thread類的實例,即創建了線程對象
3.調用線程的start方法來啟動線程
結論:使用繼承子Thread類的子類來創建線程類時,多個線程無法共享線程類的實例變量(比如上面的i)
1:定義Runnable接口的實現類,并重寫它的Run方法,run方法同樣是該線程的執行體!
2:創建Runnable實現類的實例,并將此實例作為Thread的target創建一個Thread對象,該Thread對象才是真正的線程對象!
3:調用start方法啟動該線程
結論:采用Ruunable接口的方式創建多個線程可以共享線程類的實例變量,這是因為在這種方式下,程序創建的Runnable對象只是線程的target,而多個線程可以共享一個target,所以多個線程可以共享一個實例變量
通過Runnable實現多線程其實就是將run包裝成線程的執行體,但是目前java無法將任意方法包裝成線程執行體
從Java5開始,Java提供 Callable接口,Callable接口提供了一個call()方法可以作為線程執行體,看起來和Runnable很像,但call()方法更強大——call()方法可以有返回值、call()方法可以拋出異常
Java5提供了Future接口來代表Callable接口的call()方法的返回值,并為Future接口提供了一個FutureTask實現類,該實現類實現類Future接口,也實現了Runnable接口——可以作為Thread的target。
實現步驟:
1:創建Callable接口的實現類,并實現call方法,該call方法會成為線程執行體,且call方法具有返回值,在創建callable接口的實現類!
2:使用FutrueTask類來包裝Callable對象,該FutrueTask封裝類Callable的call方法的返回值
3:使用FutrueTask對象作為Thread的target創建并啟動新線程!
4:使用FutrueTask的get方法獲取執行結束后的返回值
結論:采取Runnable、Callable的優勢在于——線程類只是實現了Runnable或Callable接口,還可以繼承其它類;在這種方法下,多個線程可以共享一個target對象,因此非常適合多個相同線程處理同一份資源的情況,從而將CPU、代碼和數據分開,形參清晰的模型,體現了面對對象的編程思想。劣勢在于編程復雜度略高。
感謝各位的閱讀,以上就是“Java中線程Thread的特點及使用方法是什么”的內容了,經過本文的學習后,相信大家對Java中線程Thread的特點及使用方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。