如何使用Thread-1

如何使用Thread-1 在Android要使用執行緒必須實作Runnable,
public class MyTask implements Runnable{
    public void run(){
        //execute your task
    }
}
然後塞到Thread呼叫start方法就可以開始執行了。
new Thread(new MyTask()).start();
Android是一個多工環境, 利用MultiThread可以讓系統效能更有效的利用,
CPU會根據排程器(Scheduler)來決定要執行哪一個Thread,
如果想要讓CPU優先執行你的任務, 則可以設定priority。
myThread.setPriority(10);
順序是1(最低)到10(最高), 一般預設值是5。
如果一個Thread優先權太低, 那麼有可能發生沒有足夠時間執行完任務, 稱之為執行緒飢餓(starvation)。
聽過一個故事, 曾經有一個系統執行了10年, 後來發現有一個Thread在系統內飢餓了10年。
CPU如果要從ProcessA切換到ProcessB執行, 稱之為本文切換(Context Switch),
Context swtich對於CPU來說就會產生一種負擔,
因此如果開太多Thread則會造成系統上很大的負擔,
因為在切換的時候, 必須將Thread上面的資料存入跟讀出,
如果太多Thread則存取次數變多, 效能上也就越來越差。
太多Thread也會造成複雜度增加, 因為你會無法得知執行順序。
for(int i = 0; i < 10; i++){
    new Thread(new Runnable(){
        public void run(){
            //long time task
        }
    }).start();
}
以上的例子將會開啟10個Threas執行任務, 但是完成的時間卻是不固定的。
如果2個或以上的執行緒一起共同存取一塊資料又稱為臨界區段(Critical section),
則會造成資料上的不一致,稱之為競態條件(Race Condition)。
解決這個問題, 一般會在進入Critical section加入一把鎖(Lock),
舉個例子:
當你在使用廁所, 所以你把門鎖起來, 等你使用完畢以後, 就把門打開, 讓其他人可以使用廁所,
但是加入鎖卻會讓CPU效能降低, 因為其他的Thread必須等待你使用完才可以使用,
因此鎖就出現了許多演算法(後面再講)。
那一般JAVA要使用鎖通常都會使用synchronized這個關鍵字。
synchronized(this){
    mVar++;
}
而synchronized可以鎖物件、鎖方法、鎖變數…等。
請參考官網
在Thread上執行不會發生Race Condition稱之為執行緒安全(Thread safety)。
在某些資料結構上面, 會考慮到執行緒安全,
例如HashMap就是一個執行緒不安全的資料結構, 可以改用ConcurrentHashMap。
Thread的生命週期可以參考如何使用Thread-2