17 November 2011
Java Thread: run() vs start()

剛在寫ANDROID,在使用到 audioRecord,所以用到了thread!
突然忘記要用run呢? 還是要用start?
查了一下資料,才找出差異性。


使用run呢,他是循序性的,也就是說他會跑完run裡面的程式,才會跳脫。
而start不是。
用個簡單的範例說明一下:
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println("t1");
}
});

Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println("t2");
}
}
});

上面我們宣告了2個thread,一個是t1,一個是t2。
都做完一千次才會停止。
他們分別會去印出自己是t1還是t2。
 如果我們是使用run,如下:
t1.run();
t2.run();

那麼印出來的值一定是像下面一樣
 t1 -> t1 -> t1 -> .........t1 ->  t2 -> t2 -> ......t2 
會先印完1000次的t1,才開始印1000次的t2。 但如果我們是使用start,如下:
t1.start();
t2.start();

結果就會相互交叉,
可能是t1->t1->t2->t1->t2..........
以此類推。












blog comments powered by Disqus