2015年8月4日 星期二

Java上課練習:多執行緒_實作 Runnable 介面

實作 Runnable 介面,比繼承 Thread 更具彈性

Java 類別只能單一繼承,盡量採用實作 Runnable,將 Runnable 交給 Thread 執行

類別圖


多執行緒(Thread)的程式使用Runnable改寫,使用兩個執行緒處理一個程式
class 任務 extends Thread{
    int i;
    public void run(){
        for(;i<100;i++){
            String name=Thread.currentThread().getName();//取得目前執行緒的名稱
            System.out.println(name+":"+i);
        }
    }           
}

public class Test3 {

    public static void main(String[] args) {
        任務 task =new 任務(); 
        //兩個執行緒共用一個task
        Thread t1=new Thread(task);//Thread-0
        Thread t2=new Thread(task);//Thread-1
        t1.start();
        t2.start();

    }
}

顯示結果


Q:為什麼 i 沒有連續?
Ans:因為 i++ 並非原子性操作,電腦的運算往往不是一個動作能完成
           i ++  看似是一個動作,實際上需要三個動作
            1. 將記憶體資料放入CPU
        2. CPU執行加1
        3. 將CPU運算結果放回記憶體

沒有留言:

張貼留言