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運算結果放回記憶體
沒有留言:
張貼留言