進程、多進程、線程、多線程的概念
進程(process):CPU的執行路徑。通俗的說就是系統中正在運行的程序。比如我們打開了浏覽器、QQ等等,這些程序一旦被打開運行了,就是所謂的進程。
多進程:系統中同時運行的多個程序。這個我們應該不難理解了,在打開浏覽器的同時我們也可以QQ聊天、CS單機游戲等。
線程(thread):運行在進程中的運行單元。比如迅雷下載中我們的某一個下載任務就是一個線程。
多線程:同理可知,每個進程裡面有多個獨立的或者相互有協作關系的運行單元我們稱之為多線程。
第一個多線程程序
Java中多線程的實現方式有兩種:繼承Thread父類、實現Runnable接口。
首先我們實現一個簡單的多線程的實現,交替執行程序並輸出1~20。
package MyJavaThread;
public class MyFirstThreadTest {
public static void main(String[] args) {
new Thread(new Runnable() {
public void run() {
int i=1;
while (i<=20) {
System.out.println(Thread.currentThread().getName() + ": " + i++);
}
}
}).start();
int i=20;
while (i>0) {
System.out.println(Thread.currentThread().getName() + ": " + i--);
}
}
}
部分截圖如下
沒有真正意義上的多線程
我們知道,CPU在同一時刻只能給一個程序分配資源(單核情況下),也就是賦予一個程序運行權力,那麼我們看到一次能運行好幾個程序其實是CPU來回切換執行權產生的效果。因而讓人們覺得是並發運行的,只是CPU切換的速度非常快罷了。
線程的狀態
線程有自己的狀態,我們稱為生命周期:初始狀態、運行狀態、凍結狀態和終止狀態。
線程的朝陽--初始化狀態
線程的初始化就是我們所說的創建了一個線程,也就是實例化了一個Thread的子類,等著被start。
線程的青春--運行狀態
當我們調用了start方法的時候,此時線程就處於了運行狀態。但是嚴謹的說,此時線程不一定就會馬上運行,它處於一個臨時狀態,即在CPU的執行隊列當中,等待CPU輪回進行執行,獲取執行權。
線程的感冒--凍結狀態
線程被調用了sleep方法或者調用了wait方法之後,放棄了CPU的執行權。但是凍結之後也可以再次回到運行狀態,重新獲取CPU的執行權。當然也可以在中斷或出現異常的時候直接到死亡狀態。
線程的落幕—死亡狀態
如果線程出現了致命的異常或者線程的執行邏輯完畢,這就意味著線程要謝幕say byebye了。死亡後的線程不能再次回到任何一個狀態。
總結