国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JavaEE 初階篇-深入了解進(jìn)程與線程(常見的面試題:進(jìn)程與線程的區(qū)別)

這篇具有很好參考價(jià)值的文章主要介紹了JavaEE 初階篇-深入了解進(jìn)程與線程(常見的面試題:進(jìn)程與線程的區(qū)別)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

??博客主頁:?【小扳_-CSDN博客】
?感謝大家點(diǎn)贊??收藏?評論?

JavaEE 初階篇-深入了解進(jìn)程與線程(常見的面試題:進(jìn)程與線程的區(qū)別),JavaEE 初級篇,java,java-ee,面試,職場和發(fā)展,jvm

JavaEE 初階篇-深入了解進(jìn)程與線程(常見的面試題:進(jìn)程與線程的區(qū)別),JavaEE 初級篇,java,java-ee,面試,職場和發(fā)展,jvm

文章目錄

? ? ? ? 1.0 進(jìn)程概述

? ? ? ? 2.0 線程概述

? ? ? ? 2.1 多線程概述

? ? ? ? 3.0 常見的面試題:談?wù)勥M(jìn)程與線程的區(qū)別

? ? ? ? 4.0 Java 實(shí)現(xiàn)多線程的常見方法

? ? ? ? 4.1 實(shí)現(xiàn)多線程方法 - 繼承 Thread 類

? ? ? ? 4.2?實(shí)現(xiàn)多線程方法 - 實(shí)現(xiàn) Runnable?接口


? ? ? ? 1.0 進(jìn)程概述

????????一個(gè)程序運(yùn)行起來,就會(huì)對應(yīng)一個(gè)進(jìn)程,進(jìn)程是系統(tǒng)分配資源的基本單位。每個(gè)進(jìn)程都有自己的地址空間、代碼、數(shù)據(jù)、堆棧等資源,可以獨(dú)立運(yùn)行并與其他進(jìn)程隔離。

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

? ? ? ? 1)進(jìn)程是程序的執(zhí)行實(shí)例,是計(jì)算機(jī)系統(tǒng)中最基本的執(zhí)行單位。

? ? ? ? 2)每個(gè)進(jìn)程有自己的地址空間、資源和狀態(tài),相互獨(dú)立運(yùn)行,互不干擾。

進(jìn)程的狀態(tài):

? ? ? ? 1)就緒態(tài)(Ready):進(jìn)程已經(jīng)準(zhǔn)備好運(yùn)行,等待系統(tǒng)分配處理器資源。

? ? ? ? 2)運(yùn)行態(tài)(Running):進(jìn)程正在執(zhí)行指令,占用處理器資源。

? ? ? ? 3)阻塞態(tài)(Blocked):進(jìn)程因等待某些事件發(fā)生而暫時(shí)停止運(yùn)行。

? ? ? ? 4)終止態(tài)(Terminated):進(jìn)程執(zhí)行完畢或被終止,釋放資源。

? ? ? ? 2.0 線程概述

????????是進(jìn)程中的實(shí)際執(zhí)行單元。線程是系統(tǒng)調(diào)度執(zhí)行的基本單位。一個(gè)進(jìn)程可以包含一個(gè)或多個(gè)線程,共享進(jìn)程的資源,但每個(gè)線程有自己的??臻g和執(zhí)行路徑。

線程特點(diǎn):

? ? ? ? 1)線程是進(jìn)程中的執(zhí)行單元,可以看作是輕量級的進(jìn)程。

? ? ? ? 2)同一進(jìn)程中的線程共享進(jìn)程的地址空間和資源,可以直接訪問進(jìn)程的全局變量和數(shù)據(jù)。線程共享進(jìn)程的資源,減少資源的重復(fù)占用,提高資源的利用效率。

? ? ? ? 3)線程之間的切換比進(jìn)程之間的切換更快速,因?yàn)榫€程共享相同的地址空間。

線程的狀態(tài):

? ? ? ? 1)就緒態(tài)(Ready):進(jìn)程已經(jīng)準(zhǔn)備好運(yùn)行,等待系統(tǒng)分配處理器資源。

? ? ? ? 2)運(yùn)行態(tài)(Running):進(jìn)程正在執(zhí)行指令,占用處理器資源。

? ? ? ? 3)阻塞態(tài)(Blocked):進(jìn)程因等待某些事件發(fā)生而暫時(shí)停止運(yùn)行。

? ? ? ? 4)終止態(tài)(Terminated):進(jìn)程執(zhí)行完畢或被終止,釋放資源。

? ? ? ? 2.1 多線程概述

????????多線程是指在一個(gè)程序中同時(shí)執(zhí)行多個(gè)線程,每個(gè)線程可以獨(dú)立執(zhí)行不同的任務(wù)或操作。在Java中,多線程可以讓程序更高效地利用計(jì)算機(jī)的多核處理器,提高程序的性能和響應(yīng)速度。

? ? ? ? 3.0 常見的面試題:談?wù)勥M(jìn)程與線程的區(qū)別

? ? ? ? 1)資源占用方面上的區(qū)別:

? ? ? ? 進(jìn)程擁有獨(dú)立的地址空間和資源,進(jìn)程與進(jìn)程之間相互獨(dú)立,即使一個(gè)進(jìn)程出現(xiàn)了某些因素的影響,不能運(yùn)行了,另一個(gè)進(jìn)程也不會(huì)受到影響。

? ? ? ? 線程共享所屬進(jìn)程的地址和資源,包括全局變量、棧空間等,線程之間可以直接通信。若在一個(gè)進(jìn)程中有若個(gè)線程中,即使只有一個(gè)線程出現(xiàn)問題,那么所有的線程都有可能會(huì)收到影響。

? ? ? ? 2)通信和同步方面上:

? ? ? ? ?進(jìn)程通信比較復(fù)雜,需要使用 IPC 機(jī)制,如管道、消息隊(duì)列、共享內(nèi)存等。

? ? ? ? 線程之間共享進(jìn)程的資源,可以直接訪問全局變量,線程通信更加方便。

? ? ? ? 3)切換開銷方面上的區(qū)別:

? ? ? ? 進(jìn)程切換的開銷比較大,需要保存和恢復(fù)整個(gè)進(jìn)程的狀態(tài),包括內(nèi)存映像、寄存器等。

? ? ? ? 線程切換的開銷比較小,因?yàn)榫€程共享進(jìn)程的資源,只需要保存和回復(fù)線程的稀有數(shù)據(jù)。

舉個(gè)例子:

線程與進(jìn)程的區(qū)別:

JavaEE 初階篇-深入了解進(jìn)程與線程(常見的面試題:進(jìn)程與線程的區(qū)別),JavaEE 初級篇,java,java-ee,面試,職場和發(fā)展,jvm

? ? ? ? 4.0 Java 實(shí)現(xiàn)多線程的常見方法

? ? ? ? 1)繼承 Thread 類。2)實(shí)現(xiàn) Runnable 接口。

? ? ? ? 4.1 實(shí)現(xiàn)多線程方法 - 繼承 Thread 類

? ? ? ? 先創(chuàng)建一個(gè)類繼承 Thread 類,重寫 run 方法。還需要在主函數(shù)中利用 start 方法啟動(dòng)。這樣就創(chuàng)建了一個(gè)線程,調(diào)用 start 方法之后,系統(tǒng)會(huì)自動(dòng)調(diào)用重寫的 run 方法,也就是回調(diào)函數(shù)。交給系統(tǒng)執(zhí)行 run 方法。

????????在 mian 中也是一個(gè)線程,稱為主線程,主線程是自動(dòng)創(chuàng)建的,而 thread 線程則是我們手動(dòng)創(chuàng)建出來的。

代碼如下:

public class demo1 {
    public static void main(String[] args) {
        Thread thread = new MyThread();
        thread.start();

        while (true){
            System.out.println("正在執(zhí)行主線程");
        }

    }
}

class MyThread extends Thread{
    @Override
    public void run() {
        while (true){
            System.out.println("正在執(zhí)行 run 線程");
        }
    }
}

運(yùn)行結(jié)果:

JavaEE 初階篇-深入了解進(jìn)程與線程(常見的面試題:進(jìn)程與線程的區(qū)別),JavaEE 初級篇,java,java-ee,面試,職場和發(fā)展,jvm

以上代碼和運(yùn)行結(jié)果都是多線程所展示的,接下來對比一下單線程代碼和運(yùn)行結(jié)果:

public class demo1 {
    public static void main(String[] args) {
        Thread thread = new MyThread();
        thread.run();

        while (true){
            System.out.println("正在執(zhí)行主線程");
        }

    }
}

class MyThread extends Thread{
    @Override
    public void run() {
        while (true){
            System.out.println("正在執(zhí)行 run 線程");
        }
    }
}

? ? ? ? 注意觀察,這里沒有用到 start 方法,那么就意味著沒有創(chuàng)建新的線程當(dāng)前是主線程。因?yàn)闆]有創(chuàng)建新的線程,所以就不會(huì)有系統(tǒng)自動(dòng)調(diào)用重寫的 run 方法,那么我們自己手動(dòng)調(diào)用 run 方法也是可以的,不過還是在同一個(gè)線程里面,并沒有創(chuàng)建新的線程。因此,這里只能輸出 "正在執(zhí)行 run 線程" 這條語句,只能等到這循環(huán)結(jié)束后,才會(huì)執(zhí)行下一個(gè)循環(huán),因?yàn)樵谕粋€(gè)線程里面,不能多并行。

運(yùn)行結(jié)果:

JavaEE 初階篇-深入了解進(jìn)程與線程(常見的面試題:進(jìn)程與線程的區(qū)別),JavaEE 初級篇,java,java-ee,面試,職場和發(fā)展,jvm

? ? ? ? 除了以上方法可以看出來是否是多線程代碼,還可以用到 jconsole.exe 這個(gè)應(yīng)用程序,直觀的感受出來。還是用到以上的多線程代碼,來觀察:

進(jìn)入的頁面找到相應(yīng)的 .java 文件:

JavaEE 初階篇-深入了解進(jìn)程與線程(常見的面試題:進(jìn)程與線程的區(qū)別),JavaEE 初級篇,java,java-ee,面試,職場和發(fā)展,jvm

進(jìn)入后,可以看到一個(gè) java 應(yīng)用程序運(yùn)行的時(shí)候,至少有?15 個(gè)線程:?

JavaEE 初階篇-深入了解進(jìn)程與線程(常見的面試題:進(jìn)程與線程的區(qū)別),JavaEE 初級篇,java,java-ee,面試,職場和發(fā)展,jvm

可以我們手動(dòng)創(chuàng)建的線程 Thread-0 還有自動(dòng)創(chuàng)建的主線程:

JavaEE 初階篇-深入了解進(jìn)程與線程(常見的面試題:進(jìn)程與線程的區(qū)別),JavaEE 初級篇,java,java-ee,面試,職場和發(fā)展,jvm

? ? ? ? 剩下的線程都是 jvm 幫我們做的一些其他工作,涉及到的負(fù)責(zé)垃圾回收的,負(fù)責(zé)記錄調(diào)試信息的......

詳細(xì)補(bǔ)充:

? ? ? ? 1)start 方法調(diào)用操作系統(tǒng)提供的“創(chuàng)建線程”的 API ,在內(nèi)核中創(chuàng)建對應(yīng) PCB ,并且把 PCB 加入到鏈表中。run 方法則是在進(jìn)一步的系統(tǒng)調(diào)度到這個(gè)線程了之后,系統(tǒng)自動(dòng)就會(huì)執(zhí)行上訴 run 方法中的邏輯。

? ? ? ? 2)多線程的調(diào)度順序是無序的,在操作系統(tǒng)內(nèi)部也稱為“搶占式執(zhí)行”。任何一個(gè)線程,在執(zhí)行到任何一個(gè)代碼的過程中,都可以被其他線程搶占掉它的 cpu 資源,于是 cup 就給別的線程執(zhí)行了。這樣的搶占式執(zhí)行,充滿了隨機(jī)性,正是這樣的隨機(jī)性,使多線程的程序,執(zhí)行效果,也會(huì)難以預(yù)測,甚至可以會(huì)引入 bug 。

????????除了以上的寫法之外,還有用匿名內(nèi)部類形式。

代碼如下:

public class demo2 {
    public static void main(String[] args) {
        Thread thread = new Thread(){
            @Override
            public void run() {
                while(true){
                    System.out.println("正在運(yùn)行 run 方法");
                }
            }
        };
        thread.start();

        while (true){
            System.out.println("正在運(yùn)行 main 方法");
        }
    }
}

還可以用 lambda 方式進(jìn)行進(jìn)一步的簡化:

public class demo2 {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            while (true){
                System.out.println("正在運(yùn)行 run 方法");
            }
        });
        thread.start();

        while (true){
            System.out.println("正在運(yùn)行 main 方法");
        }
    }
}

? ? ? ? 4.2?實(shí)現(xiàn)多線程方法 - 實(shí)現(xiàn) Runnable?接口

? ? ? ? 為了提高代碼的靈活性,可以將線程的任務(wù)與線程本身分離,使代碼結(jié)構(gòu)更清晰。

? ? ? ? 先實(shí)現(xiàn) Runnable 接口,一樣的需要重寫 run 方法,再把這個(gè)實(shí)例作為參數(shù)傳入到創(chuàng)建 Thread 類中。最后調(diào)用 start 方法啟動(dòng)線程。

代碼如下:

public class demo3 {
    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable());
        thread.start();

        while (true){
            System.out.println("正在運(yùn)行 main 方法");
        }
    }

}
class MyRunnable implements Runnable{
    @Override
    public void run() {
        while (true){
            System.out.println("正在運(yùn)行 run 方法");
        }
    }
}

同樣也可以用匿名類內(nèi)部類方式:

public class demo4 {
    public static void main(String[] args) {
        Thread thread = new Thread(()-> {
                while(true) {
                    System.out.println("正在運(yùn)行 run 方法");
                }
        });

        thread.start();

        while (true){
            System.out.println("正在運(yùn)行 main 方法");
        }
    }
}

JavaEE 初階篇-深入了解進(jìn)程與線程(常見的面試題:進(jìn)程與線程的區(qū)別),JavaEE 初級篇,java,java-ee,面試,職場和發(fā)展,jvm文章來源地址http://www.zghlxwxcb.cn/news/detail-850276.html

到了這里,關(guān)于JavaEE 初階篇-深入了解進(jìn)程與線程(常見的面試題:進(jìn)程與線程的區(qū)別)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包