1. 程式人生 > >Java併發程式設計(1)

Java併發程式設計(1)

1.執行緒建立方式:

1.1繼承 Thread 建立執行緒

繼承 java.lang.Thread 類建立執行緒是最簡單的一種方法,也最直接。下面建立一個MyThread1 類,繼承 Thread,重寫其 run()方法。並在 main()方法中建立多個併發執行緒

public class MyThread1 extends Thread { 
    public MyThread1(String name) { 
        super(name);//傳遞執行緒的名字
     } 
    public static void main(String[] args) { 
          for (int i = 0; i < 5; i++) { //建立5個執行緒
             new MyThread1("thread" + i).start(); 
           } 
     } 

@Override
    public void run() { 
         for (int i = 0; i < 20; i++) {//輸出執行緒名字和i 
             System.out.println(this.getName() + ":" + i); 
         } 
     } 

這種建立方式,把執行緒執行的邏輯程式碼直接寫在了 Thread 的子類中,這樣根據執行緒的
概念模型,虛擬 CPU 和程式碼混合在一起了。並且 java 是單繼承機制,執行緒體繼承 Thread
類後,就不能繼承其他類了,執行緒的擴充套件受影響。

1.2.實現 Runnable 介面建立執行緒

public class MyThreadTarget implements Runnable { 
    public static void main(String[] args) { 
         for (int i = 0; i < 5; i++) { 
             //建立執行緒目標物件
             Runnable r = new MyThreadTarget(); 
             //把目標物件傳遞個Thread,即虛擬的cpu
             new Thread(r, "thread" + i).start(); 
         } 
 } 
    

@Override
    public void run() { 
         for (int i = 0; i < 20; i++) { 
             System.out.println(Thread.currentThread().getName() + ":"+ i); 
         } 
     } 
}

從程式中可以看出執行緒目標物件和 Thread 分開了,並傳遞給了 Thread。如果有比較復
雜的資料要處理,可以線上程目標物件中引入資料。使用這種方式獲得執行緒的名字就稍微復
雜一些,需要使用到 Thread 中的靜態方法,獲得當前執行緒物件,然後再呼叫 getName()

方法。這種方式在較複雜的程式中用的比較普遍。