如何使用Thread-2




如何使用Thread-2 執行緒有自己的生命周期。
https://www.safaribooksonline.com/library/view/efficient-android-threading/9781449364120/images/chapter07/thread_lifecycle.png.jpg
* New(新建)
new Thread(myRunnable);
尚未啟動的狀態。
  • Runnable(可執行的)
new Thread(myRunnable).start();
進入可排程系統, 只要排程器(Scheduler)指派它給CPU執行, 則會開始執行run方法。
  • Blocked/Waiting(阻塞/等待)
Thread.sleep();
Thread.yield();
當執行緒遇到別的執行緒Lock住資源, 則Thread會進入waitng或blocked的狀態。
  • Terminated(終止)
    當執行緒被中斷, 或者跑完run方法內的內容後, 則會進入結束狀態,
    此時的設定跟燒毀是一項繁重的工作, 如果不斷的重複這件事情, 則會浪費資源,
    應該考慮以Thread Pool來實作。
一般最常遇到的是如果執行緒跑到一半想要中斷它, 應該怎麼做?
當你查看API時,你會發現Thread的stop()方法已經被標示為deprecated,使用這個方法來停止一個執行緒是不被建議的。
如果你想要停止一個執行緒,你最好自行實作。
例如給他一個旗標(flag)。
new Thread(new Runnable(){
    public void run(){
        while(flag){
            //task
        }
    }
}).start();
由上面的例子可以知道, 加入一個flag當想要中止該thread, 可以讓flag不成立, 則立即結束Thread。
又或者可以這樣做, 發出一個Exception。
Thread thread = new Thread(new Runnable(){
    public void run(){
       try{
           //task
       } catch(InterruptExcetption e){
           //handle exception
       }
    }
});
thread.start();
thread.interrupt();
如上面的例子, 當啟動Thread以後, 想要停止就呼叫Interrupt則會發出Exception來停止Thread。
除了stop()之外,suspend()、resume()方法也被標示為”deprecated”,這些方法如果你要達成相同的功能,你都必須自行實作。
如果想知道Android Thread的傳遞機制可以參考如何使用Handler