中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaEE的進程,線程是什么和怎么創建線程

發布時間:2022-03-30 16:48:32 來源:億速云 閱讀:134 作者:iii 欄目:開發技術

本篇內容介紹了“JavaEE的進程,線程是什么和怎么創建線程”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、認識進程、線程 

1.1什么是進程

進程process/task.“進程"是計算機完成一個工作的"過程”

設備上一個正在運行的程序,就是一個進程。比如你打開的QQ就是一個進程,正在和別人聊天的微信也是一個進程。進程是系統進行資源分配的基本單位。

當我們打開任務管理器就可以看到,當前操作系統中正在運行的進程。

JavaEE的進程,線程是什么和怎么創建線程

要想讓一個進程真正的運行起來,就需要給這個進程分配一定的系統硬件資源。這些資源都包括:

CPU:例如我電腦中任務管理器占用了11%的CPU,QQ占用0.3%。

內存:任務管理器占用了45.7MB。Microsoft Edge占用了320.0MB

磁盤:qq使用的了0.2MB/秒。

網絡帶寬…

在舉一個例子:我是班長,老師想讓我組織一個活動,我要想組織這個活動,我就需要向老師申請一些活動經費、人員調用。這里我就相當于進程。老師就是CPU。我組織活動的時候向老師申請經費、人。就是在請求分配一些資源。有經費,有人才能把活動做好。

進程的管理

管理=描述(PCB)+組織

進程的組織:

使用一定的數據結構來組織。常見的做法是用一雙向鏈表。 當你查看進程列表都有哪些進程時,本質上就是遍歷操作系統內核中的這個組織進程的鏈表,再顯示出每個進程的這些屬性。創建一個進程,本質上就是創建了一個PCB對象,把這個對象加入到內核的鏈表中。銷毀一個進程,本質上就是把這個PCB對象從內核鏈表中刪除。

進程的描述:

PCB描述進程。這個PCB實際上是一個非常大的結構體,屬性有很多,例如:PID(下表第二列)、內存指針、文件描述符表、進程的狀態、上下文、優先級、記賬信息等等。

PID: 一個進程的身份標識,一個機器同一時刻每個進程的PID是唯一的。

內存指針: 描述這個進程使用的內存空間是哪個范圍

文件描述附表: 描述這個進程都打開了哪些文件

JavaEE的進程,線程是什么和怎么創建線程

進程的調度

說到進程,就會涉及到進程的調度,剛才可以看到我電腦上的進程是非常多的,雖然應用那里只顯示了5個,但是后臺還是幫我運行了87個進程。相信大家的電腦一定沒有這么多CPU吧。CPU數目是少于進程數目的,但是我又需要讓那些進程“同時執行”。我們的系統是支持多任務的系統。而這個多任務系統其實就是基于進程調度這樣的機制來完成的。

并發式執行

舉個例子:假設有小張同學,他長的很好看,在學校里有很多的追求者。 按正常男人的標準,我同時只能和一個女生交往~

那小張同學有沒有辦法做到同時和多個女生交往呢? 小張同學前思后想,最終決定!安排一個時間表!!!

周一早上:和A女生一起吃早飯

周二下午:和B女生一起逛街

周三晚上:和C女生一起看電影

只要小張把時間表安排好,這三個女生就不會知道其他兩個人的存在。

從宏觀上來看,(一年)小張同學同時和三個女生交往。渣男

從微觀上來看,(一天)小張同學同一時刻只是和一個女生交往。好男人。

換到電腦上操作系統就是這樣管理進程的。

只不過現實中CPU運行速度太快,我們感受不到。我們覺得好像CPU是同時在運行這么多進程一樣。

進程的優先級:安排時間表的時候優先給誰安排

進程的上下文:將寄存器的信息保存到內存中。記錄上次運行到哪個指令,下次再調度的時候就可以很方便的繼續從這個位置執行。可以理解為單機游戲的存檔,讀檔。

進程的記賬信息:記錄這個進程在CPU上執行了多久,用來輔助決定這個進程是否要繼續執行還是說要調度出去。

1.2認識線程

為什么需要線程?

我們引入進程的目的,就是為了能夠"并發編程"。為了同時運行多個程序,雖然多進程已經能夠并發進程了,但是多進程還是有一定的提升空間。

創建進程、銷毀進程、調度進程這些操作的開銷有點太大了。 為此,引入了線程。

線程

Thread,在有些系統上也叫做"輕量級進程"。為什么說它輕量呢?

創建線程比創建進程更高效;

銷毀線程比銷毀進程更高效;

調度線程比調度進程更高效;

因為創建線程并沒有申請資源,銷毀線程也不需要釋放資源。直接讓線程產生在進程內部,公用之前的資源。

線程和進制是包含的關系。一個進程可以包含多個線程或者一個線程。當創建進程之后,就相當于把資源都分配好了,接著在這個進程里面創建線程,這樣的線程就和之前的進程公用一樣的資源了。

1.3進程、線程之前的區別和聯系(面試題)

1、進程是操作系統資源分配的基本單位,線程是操作系統調度執行的基本單位。

2、進程是包含線程的,一個進程可以含有多個線程,也可以含有一個線程。

3、每個進程都有獨立的內存空間(虛擬地址空間),同一個進程的多個線程之間,公用這個虛擬地址空間。

創建線程的幾種方式

1、創建自定義類繼承Thread類重寫run方法

/**
 * Thread是Java標準庫中的一個關于線程的類
 * 常用的方式是自定義一個類繼承Thread類,然后重寫run方法
 * 這里的run方法就是線程具體要執行的任務(代碼)
 */
public class threadDemo1 {
    public static void main (String[] args) {
        Thread t=new Thread ();
    //start方法就會在操作系統中創建一個線程出來。
        t.start ();
    }
}
class MyThread extends Thread{
@Override
public void run(){
    System.out.println ("繼承Thread類創建線程");
}

}

2、實現Runable接口,重寫run方法

public class threadDemo2 {
    public static void main (String[] args) {
        Thread T=new Thread (new myRunable ());
        T.start ();
    }
}
class  myRunable implements  Runnable{
    @Override 
    public  void run(){
        System.out.println ("實現Runbale接口,重寫run");
    }
}

3、繼承Thread類重寫run方法,使用匿名內部類的方式

   public static void main (String[] args) {
        Thread t=new Thread (){
            @Override
            public  void  run(){
                System.out.println ("匿名內部類");
            }
        };
        t.start ();
    }

4、實現Runable,重寫run方法,使用匿名內部類

    public static void main (String[] args) {
    Thread t=new Thread (new Runnable () {
        @Override
        public void run () {
            System.out.println ("實現Runable,重寫run,使用匿名內部類");
        }
    });
    t.start ();
}

5、使用lambda表達式

//
Thread t3 = new Thread(() -> System.out.println("使用匿名類創建 Thread 子類對象"));
Thread t4 = new Thread(() -> {
    System.out.println("使用匿名類創建 Thread 子類對象");
});

“JavaEE的進程,線程是什么和怎么創建線程”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

建阳市| 青冈县| 宽城| 内江市| 刚察县| 龙南县| 上饶县| 承德县| 安阳市| 龙岩市| 刚察县| 洞头县| 武胜县| 芜湖市| 家居| 新干县| 锦屏县| 拉萨市| 法库县| 那坡县| 军事| 三河市| 游戏| 洛隆县| 恭城| 璧山县| 磐石市| 峨边| 玛曲县| 从江县| 泗洪县| 沙田区| 都匀市| 涟水县| 延长县| 邹城市| 进贤县| 大竹县| 建昌县| 新乡县| 定边县|