欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中線程Thread的特點及使用

 更新時間:2023年04月21日 09:06:35   作者:lmrylll  
這篇文章主要介紹了Java中線程的特點及使用,線程是進程的組成部分,一個進程可以擁有多個線程,而一個線程必須擁有一個父進程,那么線程該如何使用,讓我們一起來看看吧

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

線程的特點:

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

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

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

一個線程可以創(chuàng)建或撤銷另一個線程,一個進程中的多個線程可以并發(fā)執(zhí)行。

二:線程的創(chuàng)建及使用

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

方案一:繼承Thread類創(chuàng)建線程類

步驟:

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

2.創(chuàng)建Thread類的實例,即創(chuàng)建了線程對象

3.調用線程的start方法來啟動線程

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

方案二:實現Runnable接口

1:定義Runnable接口的實現類,并重寫它的Run方法,run方法同樣是該線程的執(zhí)行體!

2:創(chuàng)建Runnable實現類的實例,并將此實例作為Thread的target創(chuàng)建一個Thread對象,該Thread對象才是真正的線程對象!

3:調用start方法啟動該線程

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

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

方案三:使用callable和future創(chuàng)建線程

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

 

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

實現步驟:

1:創(chuàng)建Callable接口的實現類,并實現call方法,該call方法會成為線程執(zhí)行體,且call方法具有返回值,在創(chuàng)建callable接口的實現類!

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

3:使用FutrueTask對象作為Thread的target創(chuàng)建并啟動新線程!

4:使用FutrueTask的get方法獲取執(zhí)行結束后的返回值

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

到此這篇關于Java中線程的特點及使用的文章就介紹到這了,更多相關Java線程特點內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java設計模式之觀察者模式(Observer模式)

    Java設計模式之觀察者模式(Observer模式)

    這篇文章主要介紹了Java設計模式之觀察者模式(Observer模式),文中有非常詳細的代碼示例,對正在學習java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java實現統(tǒng)計文檔中關鍵字出現的次數

    Java實現統(tǒng)計文檔中關鍵字出現的次數

    這篇文章主要為大家分享了利用Java語言實現統(tǒng)計關鍵字在文檔中出現的次數的方法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-05-05
  • Springboot jar主清單屬性丟失解決方案

    Springboot jar主清單屬性丟失解決方案

    這篇文章主要介紹了Springboot jar主清單屬性丟失解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • spring-core組件詳解——PropertyResolver屬性解決器

    spring-core組件詳解——PropertyResolver屬性解決器

    這篇文章主要介紹了spring-core組件詳解——PropertyResolver屬性解決器,需要的朋友可以參考下
    2016-05-05
  • java多線程從入門到精通看這篇就夠了

    java多線程從入門到精通看這篇就夠了

    熟悉 Java 多線程編程的同學都知道,當我們線程創(chuàng)建過多時,容易引發(fā)內存溢出,因此我們就有必要使用線程池的技術了,今天通過本文給大家分享java多線程從入門到精通的相關知識,一起看看吧
    2021-06-06
  • 淺述int與string類型轉換的兩種方法

    淺述int與string類型轉換的兩種方法

    這篇文章主要介紹了Java中int與string類型轉換的兩種方法的相關資料,需要的朋友可以參考下
    2016-05-05
  • 詳解Nacos中注冊中心和配置中心的實現

    詳解Nacos中注冊中心和配置中心的實現

    Spring?Cloud?Alibaba?是阿里巴巴提供的一站式微服務開發(fā)解決方案。而?Nacos?作為?Spring?Cloud?Alibaba?的核心組件之一,提供了兩個非常重要的功能:注冊中心和配置中心,我們今天來了解和實現一下二者
    2022-08-08
  • java管道piped輸入流與輸出流應用場景案例分析

    java管道piped輸入流與輸出流應用場景案例分析

    這篇文章主要介紹了java管道流PipedInputStream與PipedOutputStream(輸入流與輸出流)的應用場景案例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • 一文帶你深入了解Java的自動拆裝箱

    一文帶你深入了解Java的自動拆裝箱

    Java推出了對于基本數據類型的對應的對象,將基本數據類型轉換為對象就稱為裝箱,反之則是拆箱,本文主要為大家介紹了Java自動拆裝箱的原理與應用,需要的可以參考下
    2023-11-11
  • 從內存方面解釋Java中String與StringBuilder的性能差異

    從內存方面解釋Java中String與StringBuilder的性能差異

    我們通常會發(fā)現使用StringBuffer或StringBuilder創(chuàng)建出來的字符串在拼接時回避String要來得快,尤其是StringBuilder,本文就從內存方面解釋Java中String與StringBuilder的性能差異,需要的朋友可以參考下
    2016-05-05

最新評論