第二章:簡單 Java 程式解析
第三章:變數與資料型態
第四章:運算子、運算式與敘述
第五章:選擇性敘述與迴圈
第十章:實例變數與函數、類別變數與函數
Powered By GitBook
啟動執行緒
在上篇 認識多執行緒 當中,提了一個不好的範例做示範。 那我們該如何啟動多個執行緒?
    建立延伸自 Thread 類別的子類別
    執行緒必須寫在 run() 函數中
滿足以上兩點便可啟動執行緒。那麼一定會有疑惑: 建立子類別? run() 函數?
Thread 就是執行緒的意思,他存放在 java.lang 類別庫當中,平時會自動載入。 而 run() 是Thread類別當中的一個函數。
那麼瞭解了這些,我們該怎麼啟動執行緒呢?
1
class 類別名稱 extends Thread
2
{
3
資料成員;
4
函數;
5
run()
6
{
7
//執行緒
8
}
9
}
Copied!
會建立子類別的目的,是我們可以進行 override 改寫的動作,改寫來自Thread類別當中的 run() 函數。
讓我們修改在[Java]多執行緒(基本觀念)當中不好的範例做示範:
首先建立子類別:
1
class multi_Test extends Thread
2
{
3
private String name;
4
public CTest(String str)
5
{
6
name=str;
7
}
8
public void run()
9
{
10
//執行緒
11
}
12
}
Copied!
並將執行緒寫在run()函數中:
1
public void run()
2
{
3
for(int i=0;i<3;i++)
4
{
5
for(int j=0;j<100000000;j++);
6
System.out.println(name);
7
}
8
}
Copied!
在main() 中:使用 start來呼叫。
1
multi_Test apple=new multi_Test("apple");
2
multi_Test pen=new multi_Test("pen");
3
apple.start();
4
pen.start();
Copied!
這時疑問來了,為什麼要使用 start() ? 如果直接呼叫 run() ,這樣並無法啟動執行緒,只是再將執行緒執行一遍而已; 因此結果只是會與在[Java]多執行緒(基本觀念)當中,不好的範例相同。
因為我們繼承了來自 Thread 類別,也會繼承當中的 start() 。 而這個 start() 會在 scheduler 排程器中登入執行緒,當執行緒開始執行 run() 才被呼叫。

完整程式碼

1
class multi_Test extends Thread
2
{
3
private String name;
4
public CTest(String str)
5
{
6
name=str;
7
}
8
public void run()
9
{
10
for(int i=0;i<3;i++)
11
{
12
for(int j=0;j<100000000;j++);
13
System.out.println(name);
14
}
15
}
16
}
17
18
public class multi_thread_2
19
{
20
public static void main(String args[])
21
{
22
multi_Test apple=new multi_Test("apple");
23
multi_Test pen=new multi_Test("pen");
24
apple.start();
25
pen.start();
26
}
27
}
Copied!
Last modified 9mo ago
Copy link