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

Java中線(xiàn)程Thread的特點(diǎn)及使用

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

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

線(xiàn)程的特點(diǎn):

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

線(xiàn)程是獨(dú)立運(yùn)行的,其不知道進(jìn)程中是否還有其他線(xiàn)程存在。

線(xiàn)程的執(zhí)行是搶占式的,也就是說(shuō),當(dāng)前執(zhí)行的線(xiàn)程隨時(shí)可能被掛起,以便運(yùn)行另一個(gè)線(xiàn)程。

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

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

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

方案一:繼承Thread類(lèi)創(chuàng)建線(xiàn)程類(lèi)

步驟:

1.定義Thread類(lèi)的子類(lèi) 并重寫(xiě)該類(lèi)的Run方法,該run方法的方法體就代表了該線(xiàn)程需要完成的任務(wù)

2.創(chuàng)建Thread類(lèi)的實(shí)例,即創(chuàng)建了線(xiàn)程對(duì)象

3.調(diào)用線(xiàn)程的start方法來(lái)啟動(dòng)線(xiàn)程

結(jié)論:使用繼承子Thread類(lèi)的子類(lèi)來(lái)創(chuàng)建線(xiàn)程類(lèi)時(shí),多個(gè)線(xiàn)程無(wú)法共享線(xiàn)程類(lèi)的實(shí)例變量(比如上面的i)

方案二:實(shí)現(xiàn)Runnable接口

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

2:創(chuàng)建Runnable實(shí)現(xiàn)類(lèi)的實(shí)例,并將此實(shí)例作為T(mén)hread的target創(chuàng)建一個(gè)Thread對(duì)象,該Thread對(duì)象才是真正的線(xiàn)程對(duì)象!

3:調(diào)用start方法啟動(dòng)該線(xiàn)程

結(jié)論:采用Ruunable接口的方式創(chuàng)建多個(gè)線(xiàn)程可以共享線(xiàn)程類(lèi)的實(shí)例變量,這是因?yàn)樵谶@種方式下,程序創(chuàng)建的Runnable對(duì)象只是線(xiàn)程的target,而多個(gè)線(xiàn)程可以共享一個(gè)target,所以多個(gè)線(xiàn)程可以共享一個(gè)實(shí)例變量

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

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

從Java5開(kāi)始,Java提供 Callable接口,Callable接口提供了一個(gè)call()方法可以作為線(xiàn)程執(zhí)行體,看起來(lái)和Runnable很像,但call()方法更強(qiáng)大——call()方法可以有返回值、call()方法可以?huà)伋霎惓?/strong>

 

Java5提供了Future接口來(lái)代表Callable接口的call()方法的返回值,并為Future接口提供了一個(gè)FutureTask實(shí)現(xiàn)類(lèi),該實(shí)現(xiàn)類(lèi)實(shí)現(xiàn)類(lèi)Future接口,也實(shí)現(xiàn)了Runnable接口——可以作為T(mén)hread的target。

實(shí)現(xiàn)步驟:

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

2:使用FutrueTask類(lèi)來(lái)包裝Callable對(duì)象,該FutrueTask封裝類(lèi)Callable的call方法的返回值

3:使用FutrueTask對(duì)象作為T(mén)hread的target創(chuàng)建并啟動(dòng)新線(xiàn)程!

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

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

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

相關(guān)文章

  • Java設(shè)計(jì)模式之觀察者模式(Observer模式)

    Java設(shè)計(jì)模式之觀察者模式(Observer模式)

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

    Java實(shí)現(xiàn)統(tǒng)計(jì)文檔中關(guān)鍵字出現(xiàn)的次數(shù)

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

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

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

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

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

    java多線(xiàn)程從入門(mén)到精通看這篇就夠了

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

    淺述int與string類(lèi)型轉(zhuǎn)換的兩種方法

    這篇文章主要介紹了Java中int與string類(lèi)型轉(zhuǎn)換的兩種方法的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • 詳解Nacos中注冊(cè)中心和配置中心的實(shí)現(xiàn)

    詳解Nacos中注冊(cè)中心和配置中心的實(shí)現(xiàn)

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

    java管道piped輸入流與輸出流應(yīng)用場(chǎng)景案例分析

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

    一文帶你深入了解Java的自動(dòng)拆裝箱

    Java推出了對(duì)于基本數(shù)據(jù)類(lèi)型的對(duì)應(yīng)的對(duì)象,將基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換為對(duì)象就稱(chēng)為裝箱,反之則是拆箱,本文主要為大家介紹了Java自動(dòng)拆裝箱的原理與應(yīng)用,需要的可以參考下
    2023-11-11
  • 從內(nèi)存方面解釋Java中String與StringBuilder的性能差異

    從內(nèi)存方面解釋Java中String與StringBuilder的性能差異

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

最新評(píng)論