2010年9月16日 星期四

[ Java小學堂 ] 多線程設計模式 : 線程的啟動與暫時停止

前言 : 

如欲啟動線程, 有下列兩種方法 :
* 利用 Thread 類的子類實現, 啟動線程
* 利用 Runnable 介面的實現類別實例, 啟動線程.
以下依次說明


線程的啟動(1) - 利用Thread 類的子類 
參考如下範例, PrintThread 類是根據建構子傳入預重複的字串與重複次數. 並且繼承自 Thread 成為其子類. 
之後在main 中建立兩個 PrintThread的實例並呼叫其父類的 API:start() 啟動線程. 範例代碼如下 : 
  1. package dp.thread;  
  2.   
  3. /** 
  4. * BN : Java 多線程設計模式 (Page 18) 
  5. * BD : 
  6. *   Demo 啟動線程 
  7. * @author John 
  8. */  
  9. public class PrintThread extends Thread{  
  10.     private String message; //Print message  
  11.     private int times = 1//Loop times   
  12.       
  13.     public PrintThread(String m,int t){  
  14.         this.message = m;  
  15.         this.times = t;  
  16.     }  
  17.       
  18.     public void run(){  
  19.         for(int i=0;i
  20.             System.out.println(this.getId()+":"+message);  
  21.         }  
  22.     }  
  23.       
  24.     public static void main(String argsp[]){  
  25.         new PrintThread("Good!",10).start();  
  26.         new PrintThread("Nice",10).start();  
  27.     }     
  28. }  


線程的啟動(2) - 利用Runnable 介面 
繼續說明利用了實現了介面 Runnable 的類的實例以啟動線程的方法. Runnable 接口是 java.lang Package 裡的接口, 聲明方法如下: 
  1. public interface Runnable{  
  2.     public abstract void run();  
  3. }  
以實現Runnable 介面的類別必須實現run 方法. 
Printer 類為實現Runnable 介面的類別, 並透過建構子傳入預重複的字串與重複次數. 並在main 方法裡首先建立Thread 的實例並以Printer實例為其建構子參數傳入. 在透過Thread 的API : start() 啟動線程. 範例代碼如下 : 
  1. package dp.thread;  
  2.   
  3. /** 
  4. * BN : Java 多線程設計模式 (Page 20) 
  5. * BD : 
  6. *   Demo 啟動線程 
  7. * @author John 
  8. */  
  9. public class Printer implements Runnable{  
  10.     private String message;  
  11.     private int times;  
  12.       
  13.     public Printer(String m,int t){  
  14.         this.message = m;  
  15.         this.times = t;  
  16.     }  
  17.   
  18.     @Override  
  19.     public void run() {       
  20.         for(int i=0;i
  21.             System.out.println(message);  
  22.         }  
  23.     }  
  24.       
  25.     public static void main(String args[]){  
  26.         new Thread(new Printer("Good",10)).start();  
  27.         new Thread(new Printer("Nice",10)).start();  
  28.     }  
  29. }  

線程的暫時停止 : 
利用 Thread 類別的 API : sleep 方法可以暫時停止線程的執行. API : sleep 是類別方法. 執行下面的語句可以讓當前線程 (執行此語句的線程) 暫時停止約 1000 ms (約 1s) : 
  1. Thread.sleep(1000);  

如下範例代碼為一個連續輸出 "Good!" 的程序, 約每顯示一次就暫停線程1000 ms : 
  1. package dp.thread;  
  2.   
  3. /** 
  4. * BN : Java 多線程設計模式 (Page 21) 
  5. * BD : 
  6. *   Demo 暫時停止線程 
  7. * @author John 
  8. */  
  9. public class SleepThread {  
  10.   
  11.     /** 
  12.      * @param args 
  13.      */  
  14.     public static void main(String[] args) {  
  15.         for(int i=0;i<10;i++){  
  16.             System.out.println("Good! ");  
  17.             try {  
  18.                 Thread.sleep(1000);  
  19.             } catch (InterruptedException e) {                
  20.                 e.printStackTrace();  
  21.             }  
  22.         }  
  23.     }  
  24. }  

沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...