java執行緒學習(1)_thinkingInjava第四版
阿新 • • 發佈:2019-01-06
public class LiftOff implements Runnable { protected int countDown = 10 ; private static int taskCount = 0 ; private final int id = taskCount ++ ; public LiftOff() { super(); } public LiftOff(int countDown) { this.countDown = countDown ; } public String status() { return "#" + this.id + "(" + (countDown > 0 ? countDown : "Liftoff!" ) + ") " ; } @Override public void run() { while(this.countDown -- > 0) { System.out.println(status()); //對執行緒排程器的一種建議,表示我已經完成生命週期中最重要的部分了 此時正是切換執行緒的大好時機 Thread.yield(); } } public static void main(String [] args) { //此寫法並不會呼叫執行緒 /*LiftOff off = new LiftOff() ; off.run();*/ //要實現執行緒行為 必須顯示的講一個任務附著到執行緒上 /*Thread thread = new Thread(new LiftOff()) ; thread.start(); System.out.println("Waiting for LiftOff");*/ //同時啟動多個執行緒 出現執行緒被換進換出時混在了一起 /*for(int i = 0 ; i < 5; i ++) { Thread thread = new Thread(new LiftOff()) ; thread.start(); System.out.println("Waiting for LiftOff"); }*/ //使用1.5之後推出的執行器Executor來啟動執行緒 //通常會創建於所需數量相同的執行緒 /*ExecutorService exec = Executors.newCachedThreadPool() ;*/ //使用有限的執行緒來執行任務 /*ExecutorService exec = Executors.newFixedThreadPool(5) ;*/ //就像執行緒為1的newFixedThreadPool 如果提交多個任務那麼這些任務將排隊 所有任務使用相同的執行緒 //這種方式不需要在共享資源上處理同步 ExecutorService exec = Executors.newSingleThreadExecutor() ; for(int i = 0 ; i < 5; i ++) { exec.execute(new LiftOff()); } //並不是表示結束執行器 而是防止新的任務被提交給這個執行器 // (這個程式將在執行器Executor中的所有任務執行結束後儘快的退出) exec.shutdown(); } }