国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

線程總結(jié)

justCoding / 1400人閱讀

摘要:一個(gè)進(jìn)程可以擁有多個(gè)線程,一個(gè)線程必須有一個(gè)父進(jìn)程。線程是獨(dú)立運(yùn)行的,它并不知道進(jìn)程中是否還有其他的線程存在。線程的調(diào)度和管理由進(jìn)程本身負(fù)責(zé)完成。因此多線程實(shí)現(xiàn)多任務(wù)并發(fā)比多線程的效率高。

??一個(gè)任務(wù)通常就是一個(gè)程序,每個(gè)運(yùn)行中的程序就是一個(gè)進(jìn)程。當(dāng)一個(gè)程序運(yùn)行時(shí),內(nèi)部可能包含了多個(gè)順序執(zhí)行流,每個(gè)順序執(zhí)行流就是一個(gè)線程。

進(jìn)程
定義:

??當(dāng)一個(gè)程序進(jìn)入內(nèi)存運(yùn)行時(shí),即變成一個(gè)進(jìn)程。進(jìn)程是處于運(yùn)行過(guò)程中的程序,并且具有一定的獨(dú)立功能,進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。

進(jìn)程的特點(diǎn):

獨(dú)立性:是系統(tǒng)獨(dú)立存在的實(shí)體,擁有自己獨(dú)立的資源,有自己私有的地址空間。在沒(méi)有經(jīng)過(guò)進(jìn)程本身允許的情況下,一個(gè)用戶的進(jìn)程不可以直接訪問(wèn)其他進(jìn)程的地址空間。

動(dòng)態(tài)性:進(jìn)程與程序的區(qū)別在于:程序只是一個(gè)靜態(tài)的指令集合,而進(jìn)程是一個(gè)正在系統(tǒng)中活動(dòng)的指令集和,進(jìn)程中加入了時(shí)間的概念。進(jìn)程具有自己的生命周期和不同的狀態(tài),這些都是程序不具備的。

并發(fā)性:多個(gè)進(jìn)程可以在單個(gè)處理器上并發(fā)執(zhí)行,多個(gè)進(jìn)程之間不會(huì)相互影響。

并行性和并發(fā)性

??并行:指在同一時(shí)刻,有多條指令在多個(gè)處理上同時(shí)執(zhí)行。(多核同時(shí)工作)

??并發(fā):指在同一時(shí)刻只能有一條指令執(zhí)行,但多個(gè)進(jìn)程指令被快速輪換執(zhí)行,使得在宏觀上具有多個(gè)進(jìn)程同時(shí)執(zhí)行的效果。(單核在工作,單核不停輪詢)

線程

??多線程擴(kuò)展了多進(jìn)程的概念,使得同一個(gè)進(jìn)程可以同時(shí)并發(fā)處理多個(gè)任務(wù)。
??線程(Thread)也被成為輕量級(jí)的進(jìn)程,線程是進(jìn)程執(zhí)行的單元,線程在程序中是獨(dú)立的、并發(fā)的執(zhí)行流

??當(dāng)進(jìn)程被初始化后,主線程就被創(chuàng)建了。絕大數(shù)應(yīng)用程序只需要有一個(gè)主線程,但也可以在進(jìn)程內(nèi)創(chuàng)建多條的線程,每個(gè)線程也是相互獨(dú)立的。

??一個(gè)進(jìn)程可以擁有多個(gè)線程,一個(gè)線程必須有一個(gè)父進(jìn)程。

??線程可以擁有自己的堆棧、自己的程序計(jì)數(shù)器和自己的局部變量,但不擁有系統(tǒng)資源,它與父進(jìn)程的其他線程共享該進(jìn)程所擁有的全部資源,因此編程更加方便。

??線程是獨(dú)立運(yùn)行的,它并不知道進(jìn)程中是否還有其他的線程存在。線程的執(zhí)行是搶占式的,即:當(dāng)前運(yùn)行的線程在任何時(shí)候都有可能被掛起,以便另外一個(gè)線程可以運(yùn)行。

??一個(gè)線程可以創(chuàng)建和撤銷另一個(gè)線程,同一個(gè)進(jìn)程中多個(gè)線程之間可以并發(fā)執(zhí)行。

??線程的調(diào)度和管理由進(jìn)程本身負(fù)責(zé)完成。

??歸納而言:操作系統(tǒng)可以同時(shí)執(zhí)行多個(gè)任務(wù),每個(gè)任務(wù)就是進(jìn)程;進(jìn)程可以同時(shí)執(zhí)行多個(gè)任務(wù),每個(gè)任務(wù)就是線程

多線程的優(yōu)點(diǎn):

進(jìn)程之間不能共享內(nèi)存,但線程之間共享內(nèi)存非常容易

系統(tǒng)創(chuàng)建進(jìn)程要為該進(jìn)程重新分配系統(tǒng)資源,但創(chuàng)建線程的代價(jià)則小得多。因此多線程實(shí)現(xiàn)多任務(wù)并發(fā)比多線程的效率高。

Java語(yǔ)言內(nèi)置了多線程功能支撐,簡(jiǎn)化了多線程的編程。

線程的創(chuàng)建和啟動(dòng)
一、繼承Thread類創(chuàng)建線程類

步驟:
① 定義Thread類的子類,并重寫該類的run()方法,該run()方法的方法體就代表了線程需要完成的任務(wù),稱為線程執(zhí)行體

② 創(chuàng)建Thread子類的實(shí)例,即創(chuàng)建了線程對(duì)象

③ 調(diào)用線程對(duì)象的start()方法來(lái)啟動(dòng)該線程
示例:

// 通過(guò)繼承Thread類來(lái)創(chuàng)建線程類
public class FirstThread extends Thread
{
    private int i ;
    // 重寫run方法,run方法的方法體就是線程執(zhí)行體
    public void run()
    {
        for ( ; i < 100 ; i++ )
        {
            // 當(dāng)線程類繼承Thread類時(shí),直接使用this即可獲取當(dāng)前線程
            // Thread對(duì)象的getName()返回當(dāng)前該線程的名字
            // 因此可以直接調(diào)用getName()方法返回當(dāng)前線程的名
            System.out.println(getName() +  " " + i);
        }
    }
    public static void main(String[] args)
    {
        for (int i = 0; i < 100;  i++)
        {
            // 調(diào)用Thread的currentThread方法獲取當(dāng)前線程
            System.out.println(Thread.currentThread().getName() +  " " + i);
            if (i == 20)
            {
                // 創(chuàng)建、并啟動(dòng)第一條線程
                new FirstThread().start();
                // 創(chuàng)建、并啟動(dòng)第二條線程
                new FirstThread().start();
            }
        }
    }
}
注意點(diǎn):

① 當(dāng)Java程序開始運(yùn)行后,程序至少會(huì)創(chuàng)建一個(gè)主線程,main()方法的方法體代表主線程的線程執(zhí)行體

② 當(dāng)線程類繼承Tread類時(shí),直接使用this即可以獲取當(dāng)前線程

③ 繼承Thread類創(chuàng)建線程類,多個(gè)線程之間無(wú)法共享線程類的實(shí)例變量

二、實(shí)現(xiàn)Runnable接口創(chuàng)建線程類
步驟:

① 定義Runnable接口的實(shí)現(xiàn)類,并重寫該接口的run()方法

② 創(chuàng)建Runnable實(shí)現(xiàn)類的實(shí)例,并以此實(shí)例作為Thread的target來(lái)創(chuàng)建Tread對(duì)象,該Tread對(duì)象才是真正的線程對(duì)象

// 通過(guò)實(shí)現(xiàn)Runnable接口來(lái)創(chuàng)建線程類
public class SecondThread implements Runnable
{
    private int i ;

    // run方法同樣是線程執(zhí)行體
    public void run()
    {
        for ( ; i < 100 ; i++ )
        {
            // 當(dāng)線程類實(shí)現(xiàn)Runnable接口時(shí),
            // 如果想獲取當(dāng)前線程,只能用Thread.currentThread()方法。
            System.out.println(Thread.currentThread().getName() + "  " + i);
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < 100;  i++)
        {
            System.out.println(Thread.currentThread().getName() + "  " + i);
            if (i == 20)
            {
                SecondThread st = new SecondThread();     // ①

                // 通過(guò)new Thread(target , name)方法創(chuàng)建新線程
                new Thread(st , "新線程1").start();
                new Thread(st , "新線程2").start();
            }
        }
    }
}
注意點(diǎn):

① 實(shí)現(xiàn)Runnable接口創(chuàng)建線程類,必須通過(guò)Thread.currentThread()方法來(lái)獲得當(dāng)前線程對(duì)象

② 實(shí)現(xiàn)Runnable接口創(chuàng)建線程類,多個(gè)線程可以共享線程類的實(shí)例變量

三、使用Callable和Future創(chuàng)建線程

Callable接口提供了一個(gè)call()方法,call()方法比run()方法更強(qiáng)大:
① call()方法可以由返回值

② call()方法可以聲明拋出異常

步驟:

① 創(chuàng)建Callable接口的實(shí)現(xiàn)類,并實(shí)現(xiàn)call()方法,該call()方法作為線程執(zhí)行體,且該call()方法有返回值

② 使用FutureTask類來(lái)包裝Callable對(duì)象,該FutureTask對(duì)象封裝了該Callable對(duì)象的call()方法的返回值

③ 調(diào)用FutureTask對(duì)象的get()方法獲得子線程執(zhí)行結(jié)束的返回值

創(chuàng)建線程三種方式的對(duì)比:
實(shí)現(xiàn)Runnable接口、Callable接口創(chuàng)建線程

優(yōu)點(diǎn):
①實(shí)現(xiàn)的是接口,還可以繼承其他類

② 多個(gè)線程可以共享同一個(gè)target對(duì)象,適合多個(gè)相同的線程來(lái)處理同一份資源的情況

缺點(diǎn):
① 編程稍微復(fù)雜

② 獲取當(dāng)前線程必須用Thread.currentThread()方法來(lái)獲得

繼承Tread類創(chuàng)建線程

優(yōu)點(diǎn):
①編程簡(jiǎn)單

② 獲取當(dāng)前線程,可以直接使用this來(lái)獲得

缺點(diǎn):
① 已經(jīng)繼承了Thread類,不能繼承其他類

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/69113.html

相關(guān)文章

  • Java線程池簡(jiǎn)單總結(jié)

    摘要:本文主要內(nèi)容為簡(jiǎn)單總結(jié)中線程池的相關(guān)信息。方法簇方法簇用于創(chuàng)建固定線程數(shù)的線程池。三種常見(jiàn)線程池的對(duì)比上文總結(jié)了工具類創(chuàng)建常見(jiàn)線程池的方法,現(xiàn)對(duì)三種線程池區(qū)別進(jìn)行比較。 概述 線程可認(rèn)為是操作系統(tǒng)可調(diào)度的最小的程序執(zhí)行序列,一般作為進(jìn)程的組成部分,同一進(jìn)程中多個(gè)線程可共享該進(jìn)程的資源(如內(nèi)存等)。在單核處理器架構(gòu)下,操作系統(tǒng)一般使用分時(shí)的方式實(shí)現(xiàn)多線程;在多核處理器架構(gòu)下,多個(gè)線程能夠...

    CoorChice 評(píng)論0 收藏0
  • Java 虛擬機(jī)總結(jié)給面試的你(下)

    摘要:本篇博客主要針對(duì)虛擬機(jī)的晚期編譯優(yōu)化,內(nèi)存模型與線程,線程安全與鎖優(yōu)化進(jìn)行總結(jié),其余部分總結(jié)請(qǐng)點(diǎn)擊虛擬總結(jié)上篇,虛擬機(jī)總結(jié)中篇。 本篇博客主要針對(duì)Java虛擬機(jī)的晚期編譯優(yōu)化,Java內(nèi)存模型與線程,線程安全與鎖優(yōu)化進(jìn)行總結(jié),其余部分總結(jié)請(qǐng)點(diǎn)擊Java虛擬總結(jié)上篇 ,Java虛擬機(jī)總結(jié)中篇。 一.晚期運(yùn)行期優(yōu)化 即時(shí)編譯器JIT 即時(shí)編譯器JIT的作用就是熱點(diǎn)代碼轉(zhuǎn)換為平臺(tái)相關(guān)的機(jī)器碼...

    amc 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<