進程指的是一個應用程式執行的最小單位,而線程指的是在這個進程當中所執行的單個或多個執行的程式碼。
例如:使用windows作業系統(進程),可以同時打開不同的程式(線程)
例如:使用vs code(進程),可以同時下載插件(線程),可以同時打開開發者伺服器等等
創造Thread的方法一:
Thread 的subclass
subclass中重寫run()方法,並且將需要透過這個thread執行的程式碼定義在run()方法中subclass 並且透過實例化的物件使用start() 方法,就可以執行class PrintNum extends Thread {
@Override
public void run() {
for(int i = 0; i <= 100; i++) {
System.out.println(i)
}
}
}
class PrintNumTest {
public static void main(String[] args) {
PrintNum printNum = new PrintNum();
// 啟動新的thread,並且在另一個線程中執行
printNum.start();
// 在main的線程執行
for(int i = 0; i <= 100; i++) {
System.out.println(i)
}
}
}
printNum.start()啟動後會去執行run()中的循環,這時候main()中的循環也會在自己的線程中同時執行,所以可能會在console中產生交互的數字出現
創造Thread的方法二
Runnable接口的類Runnable的run()方法實作Thread類Thread類的構造器後,使用start()方法class PrintNum implements Runnable {
@Override
public void run() {
for(int i = 0; i <= 100; i++) {
System.out.println(i)
}
}
}
class PrintNumTest {
public static void main(String[] args) {
PrintNum printNum = new PrintNum();
// 這裡也是一個多態的操作
Thread t1 = new Thread(printNum);
// 啟動新的thread,並且在另一個線程中執行
t1.start();
// 在main的線程執行
for(int i = 0; i <= 100; i++) {
System.out.println(i)
}
}
}
常見的Thread方法:
currentThread:獲取當前執行程式碼的線程getName:獲取線程名稱setName:設置線程名稱sleep(long 毫秒):【靜態方法】將線程休眠毫秒數yield:【靜態方法】釋放CPU的執行權(如果有其他線程同時進行時,有可能會優先讓其他線程先執行)join:在a線程中使用b線程的join() 方法時,會讓a線程阻塞,直到b線程運行完後才繼續執行a線程isAlive:判斷當前線程是否存活線程中的優先級,代表的只是有較高的機會被優先執行,但不是絕對,可以透過
getPriority() 取得當前線程的優先級(默認優先級是5)setPriority() 設置當前線程的優先級(只可以設定1-10之間)Thread 中也有三個優先級的常量可以使用:
MAX_PRIORITY :最高優先級是10
MIN_PRIORITY :最低優先級是1
NORN_PRIORITY :默認優先級是5