最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中進(jìn)程的詳細(xì)解析(含實(shí)例代碼)

 更新時(shí)間:2026年05月21日 08:55:32   作者:馭淵的小故事  
Java進(jìn)程管理涉及多個(gè)方面,包括進(jìn)程的創(chuàng)建、監(jiān)控、優(yōu)化以及故障排查等,這篇文章主要介紹了java中進(jìn)程的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、操作系統(tǒng)

操作系統(tǒng)是計(jì)算機(jī)中的一個(gè)重要軟件。

操作系統(tǒng)是一個(gè)搞管理的軟件:

  • 管理各種硬件設(shè)備
  • 給各種應(yīng)用程序提供一個(gè)穩(wěn)定的運(yùn)行環(huán)境,
    這些應(yīng)用程序在運(yùn)行中,即使有一個(gè)應(yīng)用程序發(fā)生bug崩潰了,也不會(huì)影響其他應(yīng)用程序的執(zhí)行。

操作系統(tǒng)中的重要概念:進(jìn)程

• 運(yùn)行起來(lái)的程序就叫進(jìn)程。

站在操作系統(tǒng)的視角,如何管理進(jìn)程?

  1. 先描述
    使用結(jié)構(gòu)體,描述出進(jìn)程的核心屬性,
    進(jìn)程控制塊(PCB),非常大的結(jié)構(gòu)體,有很多個(gè)屬性。

  2. 再把多個(gè)進(jìn)程組織起來(lái)
    比如:Linux這樣的操作系統(tǒng),使用鏈表這樣的方式,把每個(gè)PCB串一起。

操作系統(tǒng)本身也是一個(gè)軟件,也是由一系列指令構(gòu)成的,在啟動(dòng)時(shí),CPU依次執(zhí)行操作系統(tǒng)上的這些指令(引導(dǎo)操作系統(tǒng)起來(lái))

• 所有的軟件本質(zhì)上都是靠CPU來(lái)執(zhí)行的,CPU具體執(zhí)行哪些指令,一定程度上受操作系統(tǒng)的影響。

  1. 文件描述符
    進(jìn)程在運(yùn)行過(guò)程中,很多時(shí)候需要和硬盤(pán)這個(gè)硬件設(shè)備進(jìn)行交互。
    硬盤(pán)上的數(shù)據(jù),就是以文件的形式來(lái)組織的。
    進(jìn)程在讀寫(xiě)文件的時(shí)候,就需要打開(kāi)文件,每個(gè)打開(kāi)的文件相關(guān)的信息保存到文件描述符中,文件的每一項(xiàng)都對(duì)應(yīng)著打開(kāi)了的一份文件。

操作系統(tǒng)中,會(huì)把很多資源抽象成文件來(lái)表示,所以“文件”不只是硬盤(pán)上的類(lèi)
例:網(wǎng)卡,操作系統(tǒng)管理網(wǎng)卡的時(shí)候,就是當(dāng)作“文件”一樣來(lái)管理

二、進(jìn)程的運(yùn)行

進(jìn)程的運(yùn)行,也會(huì)依賴(lài)到硬盤(pán)、網(wǎng)卡等相關(guān)硬件設(shè)備

進(jìn)程運(yùn)行,執(zhí)行指令,都是靠CPU的。

  1. 進(jìn)程是操作系統(tǒng)中,負(fù)責(zé)分配CPU的基本單位。
    分時(shí)復(fù)用:把一個(gè)單位時(shí)間,分成很多份,分別執(zhí)行不同進(jìn)程的指令
    第一份,執(zhí)行進(jìn)程1指令
    第二份,執(zhí)行進(jìn)程2的指令……
    因?yàn)镃PU的運(yùn)行速度是特別快,所以在切換的過(guò)程中,人眼很難察覺(jué)出變化了,像同時(shí)執(zhí)行一樣。

    • 把一個(gè)CPU核心上,按照分時(shí)復(fù)用,執(zhí)行多個(gè)進(jìn)程,就叫“并發(fā)執(zhí)行”
      多個(gè)進(jìn)程在一個(gè)CPU核心上在不同單位時(shí)間內(nèi)執(zhí)行。

    • 多個(gè)CPU核心上,同時(shí)執(zhí)行多個(gè)進(jìn)程 稱(chēng)為“并行執(zhí)行
      多個(gè)進(jìn)程多個(gè)CPU核心同時(shí)執(zhí)行

  2. 進(jìn)程狀態(tài),

    • New(新建)
    • RUNNABLE(可運(yùn)行)
    • BLOCKED(阻塞)
    • WAITING(等待)
    • TIMED_WAITING(超時(shí)等待)
    • TERMINATED(終止)
      • 進(jìn)程有多種狀態(tài),下面是兩個(gè)典型
        1)就緒狀態(tài) → 隨時(shí)可以到CPU上執(zhí)行
        2)阻塞狀態(tài) → 進(jìn)程當(dāng)前不適合到CPU上執(zhí)行
  3. 進(jìn)程有優(yōu)先級(jí)
    為了保證需要大量CPU資源能的正常執(zhí)行

  4. 進(jìn)程的上下文
    因?yàn)橛羞M(jìn)程調(diào)度,一個(gè)進(jìn)程執(zhí)行一會(huì),就會(huì)讓出CPU,這期間CPU執(zhí)行它會(huì)保存上次執(zhí)行的狀態(tài),多進(jìn)程繼續(xù)執(zhí)行

進(jìn)程在CPU中運(yùn)行的過(guò)程中
CPU上的各種寄存器,就保存了當(dāng)前進(jìn)程運(yùn)行的“中間狀態(tài)
寄存器上關(guān)于進(jìn)程的信息,存放在內(nèi)存中(PCB自己也會(huì)有對(duì)應(yīng)空間)
恢復(fù)時(shí):把PCB中剛才保存的屬性,填回CPU的寄存器。

  1. 進(jìn)程的記賬信息
    統(tǒng)計(jì)功能,統(tǒng)計(jì)每個(gè)進(jìn)程在CPU上運(yùn)行了多久
    如果發(fā)現(xiàn)某個(gè)進(jìn)程 很久沒(méi)有吃到CPU資源,就會(huì)給它資源傾斜
    一點(diǎn)之后,防止這個(gè)進(jìn)程餓死

new(新建),runnable(可運(yùn)行)、blocked(阻塞)、waiting(等待)
timed_waiting(超時(shí)等待) terminated(終止)

三、多線程

  • 進(jìn)程整體是一個(gè)比較“重”的概念

  • 創(chuàng)建進(jìn)程/銷(xiāo)毀進(jìn)程開(kāi)銷(xiāo)比較大

  • 為了解決上述問(wèn)題,引入線程,輕量級(jí)進(jìn)程(創(chuàng)建銷(xiāo)毀開(kāi)銷(xiāo)?。?/p>

    • 每個(gè)進(jìn)程都相當(dāng)于一個(gè)要執(zhí)行的任務(wù)
    • 每個(gè)線程也是一個(gè)要執(zhí)行的任務(wù)
  1. 進(jìn)程包含線程
    每個(gè)進(jìn)程中,都會(huì)包含一個(gè)或多個(gè)線程

  2. 進(jìn)程是操作系統(tǒng)資源分配的基本單位
    進(jìn)程內(nèi)部所包含的多個(gè)線程之間,會(huì)共享上述的內(nèi)存資源和硬盤(pán)資源,網(wǎng)絡(luò)帶寬。

進(jìn)程創(chuàng)建,需要申請(qǐng)資源
進(jìn)程的銷(xiāo)毀,需要釋放資源
→ 重量級(jí)事物,(代價(jià)大,時(shí)間消耗)

  • 對(duì)于線程來(lái)說(shuō),只是第一個(gè)線程創(chuàng)建的時(shí)候(和進(jìn)程一起創(chuàng)建)申請(qǐng)資源,后續(xù)再創(chuàng)建線程,不再手動(dòng)到資源申請(qǐng)操作(內(nèi)核少,快)
  • 只有所有的線程都銷(xiāo)毀(進(jìn)程銷(xiāo)毀)才會(huì)釋放資源,單個(gè)進(jìn)程銷(xiāo)毀某個(gè)線程,也不會(huì)釋放資源。
  • 可以理解為:在進(jìn)程創(chuàng)建的時(shí)候給線程創(chuàng)建了一次資源,后續(xù)線程的創(chuàng)建和銷(xiāo)毀都在這一層,只有進(jìn)程被銷(xiāo)毀這一次資源才會(huì)被回收。

關(guān)于線程的調(diào)度,是隨機(jī)的,我們的程序是感知不到,也干預(yù)不了。

那怎么提高效率?

? 引入多個(gè)線程, 確實(shí)可以提升效率, 但是資源一旦 就那么多,引入過(guò)多線程會(huì)使上下文切換開(kāi)銷(xiāo)增長(zhǎng),因?yàn)檎{(diào)度開(kāi)銷(xiāo)會(huì)拖累程序的性能。
而且其中一個(gè)線程拋出異常,會(huì)帶走整個(gè)進(jìn)程,所有的線程都無(wú)法運(yùn)行
如果及時(shí)捕獲,也不一定 終導(dǎo)致進(jìn)程終止。

  • 創(chuàng)建第一個(gè)線程
class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("hello");
        try{
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // throw new RuntimeException(e); // 處理異常的手段:拋出異常,導(dǎo)致程序異常終止
            break;
        }
    }
}

public class Test {
    public static void main(String[] args) {
        Thread t = new MyThread();
        t.start(); // 開(kāi)啟線程
    }
}

其中 Thread.sleep(); 會(huì)休眠

例:Thread.sleep(0); 這里是 讓此線程放棄當(dāng)前CPU資源,給別的線程用

run() 方法內(nèi),Thread.sleep()會(huì)拋出異常,但無(wú)法 throws,只能使用 try{} catch{} 來(lái)捕獲。

  • 每個(gè)線程,調(diào)度順序是隨機(jī)的,無(wú)法預(yù)測(cè)。“搶占式執(zhí)行”

創(chuàng)建線程的方法:

  1. 繼承 Thread,重寫(xiě) run

  2. 實(shí)現(xiàn) Runnable 接口,重寫(xiě) run
    例:

    • Runnable runnable = new MyRunnable();

    • Thread t = new Thread(runnable);

      class MyRunnable implements Runnable {
          @Override
          public void run() {
              System.out.println("我自己的 Runnable 的 run 方法");
          }
      }
      public class Deano01 {
      
          public static void main(String[] args) {
              Runnable r1 = new MyRunnable();
              Thread t1 = new Thread(new MyRunnable());
              Thread t2 = new Thread(r1);
              t1.start();
              t2.start();
          }
      }
    
      class MyThread extends  Thread{
          @Override
          public void run() {
              System.out.println("我自己的 Thread 的 run 方法");
          }
      }
      public class Deano01 {
      
          public static void main(String[] args) {
              // 1. 自己實(shí)現(xiàn)一個(gè)自己的Threa類(lèi)
              Thread t = new MyThread();
              t.start();
              // 2. 使用 lamabda 表達(dá)式
              Thread t1 = new Thead(() -> {
                  System.out.println("我自己的 Thread 的 run 方法");
              });
          }
      }
    

    這個(gè)接口中,只有一個(gè)無(wú)參返回值的 run 方法
    可以使用 lambda 表達(dá)式 () -> { 要執(zhí)行的代碼 }
    在括號(hào)里沒(méi)有參數(shù)!

總結(jié) 

到此這篇關(guān)于java中進(jìn)程詳細(xì)解析的文章就介紹到這了,更多相關(guān)java進(jìn)程詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot項(xiàng)目瘦身之如何將jar包與lib依賴(lài)分開(kāi)打包

    Springboot項(xiàng)目瘦身之如何將jar包與lib依賴(lài)分開(kāi)打包

    這篇文章主要介紹了Springboot項(xiàng)目瘦身之如何將jar包與lib依賴(lài)分開(kāi)打包問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Java設(shè)計(jì)模式之享元模式(Flyweight Pattern)詳解

    Java設(shè)計(jì)模式之享元模式(Flyweight Pattern)詳解

    享元模式(Flyweight Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,旨在減少對(duì)象的數(shù)量,以節(jié)省內(nèi)存空間和提高性能,本文將詳細(xì)的給大家介紹一下Java享元模式,需要的朋友可以參考下
    2023-07-07
  • Java Runtime類(lèi)詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java Runtime類(lèi)詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Runtime類(lèi)封裝了運(yùn)行時(shí)的環(huán)境。每個(gè) Java 應(yīng)用程序都有一個(gè) Runtime 類(lèi)實(shí)例,使應(yīng)用程序能夠與其運(yùn)行的環(huán)境相連接。下面通過(guò)本文給大家分享Java Runtime類(lèi)詳解,需要的朋友參考下吧
    2017-04-04
  • Java設(shè)計(jì)模式編程中的工廠方法模式和抽象工廠模式

    Java設(shè)計(jì)模式編程中的工廠方法模式和抽象工廠模式

    這篇文章主要介紹了Java設(shè)計(jì)模式編程中的工廠方法模式和抽象工廠模式,設(shè)計(jì)模式的建立有利于團(tuán)隊(duì)協(xié)作時(shí)代碼的共同維護(hù),需要的朋友可以參考下
    2016-01-01
  • 詳解java實(shí)現(xiàn)遍歷二叉樹(shù)的三種情況

    詳解java實(shí)現(xiàn)遍歷二叉樹(shù)的三種情況

    這篇文章主要介紹了java實(shí)現(xiàn)遍歷二叉樹(shù)的三種情況,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Spring Boot Thymeleaf實(shí)現(xiàn)國(guó)際化的方法詳解

    Spring Boot Thymeleaf實(shí)現(xiàn)國(guó)際化的方法詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot Thymeleaf實(shí)現(xiàn)國(guó)際化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 教你怎么用idea創(chuàng)建web項(xiàng)目

    教你怎么用idea創(chuàng)建web項(xiàng)目

    好多朋友在使用IDEA創(chuàng)建項(xiàng)目時(shí),總會(huì)碰到一些小問(wèn)題.現(xiàn)在我們就演示一下使用IDEA創(chuàng)建web項(xiàng)目的完整步驟吧.文中有非常詳細(xì)的圖文示例哦,,需要的朋友可以參考下
    2021-05-05
  • Hibernate處理多對(duì)多關(guān)系的實(shí)現(xiàn)示例

    Hibernate處理多對(duì)多關(guān)系的實(shí)現(xiàn)示例

    本文介紹了Hibernate中實(shí)現(xiàn)多對(duì)多關(guān)系的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01
  • SpringBoot實(shí)現(xiàn)接口參數(shù)加密解密的示例代碼

    SpringBoot實(shí)現(xiàn)接口參數(shù)加密解密的示例代碼

    加密解密本身并不是難事,問(wèn)題是在何時(shí)去處理?SpringMVC?中給我們提供了?ResponseBodyAdvice?和?RequestBodyAdvice,利用這兩個(gè)工具可以對(duì)請(qǐng)求和響應(yīng)進(jìn)行預(yù)處理,非常方便。廢話不多說(shuō),我們一起來(lái)學(xué)習(xí)一下
    2022-09-09
  • Calcite使用SQL實(shí)現(xiàn)查詢excel內(nèi)容

    Calcite使用SQL實(shí)現(xiàn)查詢excel內(nèi)容

    因?yàn)閏alcite本身沒(méi)有excel的適配器,?所以本文將模仿calcite-file,?搞一個(gè)calcite-file-excel實(shí)現(xiàn)查詢excel內(nèi)容,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01

最新評(píng)論

伊春市| 来宾市| 临泉县| 封丘县| 宣汉县| 广水市| 克什克腾旗| 金沙县| 石柱| 兰州市| 绥化市| 奉新县| 土默特左旗| 泉州市| 沁源县| 寿阳县| 平陆县| 岳阳县| 泰兴市| 托克逊县| 措美县| 孟州市| 阳泉市| 衡南县| 安达市| 沂水县| 霍山县| 清新县| 吴江市| 梓潼县| 驻马店市| 体育| 高青县| 聊城市| 临洮县| 修水县| 紫阳县| 长寿区| 江安县| 道孚县| 阳东县|