在介紹Thread之前,我們必須先把Program和Process這兩個觀念作一個釐清。
Program:一群程式碼的集合,用以解決特定的問題。以物件導向的觀念來類比,相當於Class。
Process:由Program所產生的執行個體,一個Program可以同時執行多次,產生多個Process。以物件導向的觀念來類比,相當於Object。
而Thread的重點如下:
1.一個Process可以有多個Thread。
2.同一個Process內的Thread使用相同的Memory Space,但這些Thread各自擁有其Stack。換句話說,Thread能透過reference存取到相同的Object,但是local variable卻是各自獨立的。
3.作業系統會根據Thread的優先權以及已經用掉的CPU時間,在不同的Thread作切換,以讓各個Thread都有機會執行。
我們要如何產生Thread呢?
Java以java.lang.Thread這個類別來表示Thread。Class Thread有兩個Constructor:
1.Thread()
2.Thread(Runnable)
第一個Constrctor沒有參數,第二個需要一個Runnable物件當參數。(Runnable是一個interface,定義於java.lang內)
Thread的優先權與影響資源的相關方法:
Thread.setPriority(int)可以設定Thread的優先權,數字越大優先權越高。Thread定義了3個相關的static final variable
public static final int MAX_PRIORITY 10
public static final int MIN_PRIORITY 1
public static final int NORM_PRIORITY 5
這邊要特別提醒的是,優先權高的Thread其佔有CPU的機會比較高,但優先權低的也都會有機會執行到。