最新国产好看的视频,伊人天堂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)資料,文中通過代碼介紹的非常詳細(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)行起來的程序就叫進(jìn)程。

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

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

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

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

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

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

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

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

進(jìn)程的運(yùn)行,也會(huì)依賴到硬盤、網(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)行速度是特別快,所以在切換的過程中,人眼很難察覺出變化了,像同時(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)程 稱為“并行執(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)行的過程中
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)程 很久沒有吃到CPU資源,就會(huì)給它資源傾斜
    一點(diǎn)之后,防止這個(gè)進(jìn)程餓死

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

三、多線程

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

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

  • 為了解決上述問題,引入線程,輕量級(jí)進(jìn)程(創(chuàng)建銷毀開銷小)

    • 每個(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)存資源和硬盤資源,網(wǎng)絡(luò)帶寬。

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

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

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

那怎么提高效率?

? 引入多個(gè)線程, 確實(shí)可以提升效率, 但是資源一旦 就那么多,引入過多線程,會(huì)使上下文切換開銷增長,因?yàn)檎{(diào)度開銷會(huì)拖累程序的性能。
而且其中一個(gè)線程拋出異常,會(huì)帶走整個(gè)進(jìn)程,所有的線程都無法運(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(); // 開啟線程
    }
}

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

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

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

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

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

  1. 繼承 Thread,重寫 run

  2. 實(shí)現(xiàn) Runnable 接口,重寫 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類
              Thread t = new MyThread();
              t.start();
              // 2. 使用 lamabda 表達(dá)式
              Thread t1 = new Thead(() -> {
                  System.out.println("我自己的 Thread 的 run 方法");
              });
          }
      }
    

    這個(gè)接口中,只有一個(gè)無參返回值的 run 方法
    可以使用 lambda 表達(dá)式 () -> { 要執(zhí)行的代碼 }
    在括號(hào)里沒有參數(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依賴分開打包

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

    這篇文章主要介紹了Springboot項(xiàng)目瘦身之如何將jar包與lib依賴分開打包問題,具有很好的參考價(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類詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

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

    Runtime類封裝了運(yùn)行時(shí)的環(huán)境。每個(gè) Java 應(yīng)用程序都有一個(gè) Runtime 類實(shí)例,使應(yīng)用程序能夠與其運(yùn)行的環(huán)境相連接。下面通過本文給大家分享Java Runtime類詳解,需要的朋友參考下吧
    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)遍歷二叉樹的三種情況

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

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

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

    這篇文章主要給大家介紹了關(guān)于Spring Boot Thymeleaf實(shí)現(xiàn)國際化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(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ì)碰到一些小問題.現(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)系的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01
  • SpringBoot實(shí)現(xiàn)接口參數(shù)加密解密的示例代碼

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

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

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

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

最新評(píng)論

济阳县| 乌兰浩特市| 高青县| 建昌县| 弥勒县| 新昌县| 平和县| 阿克苏市| 随州市| 沙田区| 恭城| 光泽县| 宝应县| 无极县| 平罗县| 清涧县| 海盐县| 台安县| 沙雅县| 英德市| 贵港市| 无锡市| 通化县| 屏山县| 泉州市| 西城区| 贡觉县| 卫辉市| 山阳县| 洛川县| 分宜县| 东光县| 民权县| 剑川县| 颍上县| 鹤山市| 吐鲁番市| 怀安县| 安陆市| 大埔区| 鄂托克旗|