2011年4月9日 星期六

JAVA筆記-Thread 多執行緒基本撰寫範例與常用函式

public class Thread extends Object implements Runnable
Thread繼承了Object類別,並由於是因為需實作Runnable介面,
所以要撰寫run()來運行想要的程序,Thread程式撰寫方法有兩種:

1. 繼承Thread類別(撰寫較為容易,本身已繼承類別之類別,將無法再繼承Thread類別)
public class Test
  public static void main(String[] args){
    HelloThread t1 = new HelloThread();
    HelloThread t2 = new HelloThread();
    t1.setName("T1");
    t1.setName("T2");
    t1.start();
    t2.start();
    // 取得目前執行緒數量
    System.out.println(Thread.activeCount());
  }
}
class HelloThread extends Thread{
  public void run(){
    for(int i=1; i<100; i++){
      // 取得目前執行緒名稱
      String tName = Thread.currentThread().getName();     System.out.println(tName + ":" + i);
    }
  }
}

2. 實作Runnable介面(程式有共同介面標準,可避免單一繼承問題)
public class Test
  public static void main(String[] args){
    HellowThread t1 = new HelloThread();
    HellowThread t2 = new HelloThread();
    Thread t1 = new Thread(t1, "T1");
    Thread t2 = new Thread(t2, "T2");
    t1.start();
    t2.start();
    // 取得目前執行緒數量
    System.out.println(Thread.activeCount());
  }
}
class HelloThread implements Runnable{
  public void run(){
    for(int i=1; i<100; i++){
      // 取得目前執行緒名稱
      String tName = Thread.currentThread().getName();       System.out.println(tName + ":" + i);
    }
  }
}

##ReadMore##
建構子方法:
1. Thread() 分派新的執行緒
2. Thread(String name)
3. Thread(Runnable target) 傳入一個Runnable物件,並分派新的執行緒
4. Thread(Runnable target, String name)

常用方法:
1. String getName() 取得名稱
2. int getPriority() 取得優先權
3. void setPriority() 可設參數1~10或MIN_PRIORITY=1、NORM_PRIORITY=5、MAX_PRIORITY=10
4. void start 將執行丟入Runnable pool中,等待系統run()呼叫
5. void run() 開始執行工作(由系統自動呼叫,非程式設計師撰寫)
6. static void yield() 將目前執行緒先行暫停,重新排程,讓與其他執行緒執行
7. static void sleep(long millis) 暫停目前執行緒,需在try-catch中呼叫,會丟出throws InterruptedException
8. void join() / void join(long millis) 用於調整執行緒執行順序,先暫停目前執行緒,而指定其他執行緒加入執行工作,執行完畢後才回復,或可設定執行時間,需在try-catch中呼叫,會丟出throws InterruptedException
9. void stop() 停止正在執行的執行緒 (不建議使用,易造成死結)
10. void suspend() 停止正在執行的執行緒 (不建議使用,易造成死結)
11. void destroy() 毀掉執行緒
12. boolean isAlive() 取得目前執行緒狀態
13. void wait() 讓執行緒進入等待狀態
14. void notify() 喚醒一個等待中的執行緒,若有多個執行緒,則由JVM決定
15. void notifyAll() 喚醒所有等待中的執行緒

2 意見 :

鄭憲錡 提到...

HellowThread 改成 HelloThread

THX

MEMO123 提到...

thank you!

張貼留言