Java 學習系列
Search…
⌃K

啟動執行緒

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

完整程式碼

class multi_Test extends Thread
{
private String name;
public CTest(String str)
{
name=str;
}
public void run()
{
for(int i=0;i<3;i++)
{
for(int j=0;j<100000000;j++);
System.out.println(name);
}
}
}
public class multi_thread_2
{
public static void main(String args[])
{
multi_Test apple=new multi_Test("apple");
multi_Test pen=new multi_Test("pen");
apple.start();
pen.start();
}
}