深入淺出javase——多線程

1:要想了解多線程,必須先了解線程,而要想了解線程,必須先了解進程,因為線程是依賴於進程而存在。

2:什麼是進程?

通過任務管理器我們就看到了進程的存在。

而通過觀察,我們發現只有運行的程序才會出現進程。

進程:就是正在運行的程序。

進程是系統進行資源分配和調用的獨立單位。每一個進程都有它自己的內存空間和系統資源。

3:多進程有什麼意義呢?

單進程的計算機只能做一件事情,而我們現在的計算機都可以做多件事情。

舉例:一邊玩遊戲(遊戲進程),一邊聽音樂(音樂進程)。

也就是說現在的計算機都是支持多進程的,可以在一個時間段內執行多個任務。

並且呢,可以提高CPU的使用率。

問題:

一邊玩遊戲,一邊聽音樂是同時進行的嗎?

不是。因為單CPU在某一個時間點上只能做一件事情。

而我們在玩遊戲,或者聽音樂的時候,是CPU在做著程序間的高效切換讓我們覺得是同時進行的。

4:什麼是線程呢?

在同一個進程內又可以執行多個任務,而這每一個任務我就可以看出是一個線程。

線程:是程序的執行單元,執行路徑。是程序使用CPU的最基本單位。

單線程:如果程序只有一條執行路徑。

多線程:如果程序有多條執行路徑。

5:多線程有什麼意義呢?

多線程的存在,不是提高程序的執行速度。其實是為了提高應用程序的使用率。

程序的執行其實都是在搶CPU的資源,CPU的執行權。

多個進程是在搶這個資源,而其中的某一個進程如果執行路徑比較多,就會有更高的幾率搶到CPU的執行權。

我們是不敢保證哪一個線程能夠在哪個時刻搶到,所以線程的執行有隨機性。

進程:

*正在運行的程序,是系統進行資源分配和調用的獨立單位。

*每一個進程都有它自己的內存空間和系統資源。

*線程:

*是進程中的單個順序控制流,是一條執行路徑

*一個進程如果只有一條執行路徑,則稱為單線程程序。

*一個進程如果有多條執行路徑,則稱為多線程程序。

*

* 舉例:

* 掃雷程序,迅雷下載

*

* 大家注意兩個詞彙的區別:並行和併發。

*前者是邏輯上同時發生,指在某一個時間內同時運行多個程序。

*後者是物理上同時發生,指在某一個時間點同時運行多個程序。

*

* Java程序的運行原理:

* 由java命令啟動JVM,JVM啟動就相當於啟動了一個進程。

* 接著有該進程創建了一個主線程去調用main方法。

*

* 思考題:

* jvm虛擬機的啟動是單線程的還是多線程的?

* 多線程的。

* 原因是垃圾回收線程也要先啟動,否則很容易會出現內存溢出。

* 現在的垃圾回收線程加上前面的主線程,最低啟動了兩個線程,所以,jvm的啟動其實是多線程的。

*/

public class MyThreadDemo {

public static void main(String[] args) {

System.out.println("hello");

new Object();

new Object();

new Object();

new Object();

//...

System.out.println("world");

}

}


分享到:


相關文章: