線程學習代碼

 

 

public class MyThread extends Thread {

public void run() {

while (running) {

// do lots of interesting stuff

try {

sleep(100);

} catch (InterruptedException e) {

// sleep interrupted

}

}

}

 

public static void main(String args[]) {

Thread t = new MyThread();

t.start();

}

}  

public class ThreadTest
{
 public static void main(String args[])
  {
 Xyz r = new Xyz();
 Thread t1 = new Thread(r);
 Thread t2 = new Thread(r);
 t1.start();
 t2.start();
 }
}

class Xyz implements Runnable
{
 int i;
 
 public void run()
 {
  while (true)
  {
  System.out.println("Hello " + i++);
  if (i >50) break; //如果改爲i==50有一個線程將不能終止
  }
 }

運行結果

Hello 0
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5
Hello 6
Hello 7
Hello 8
Hello 9
Hello 10
Hello 11
Hello 12
Hello 13
Hello 14
Hello 15
Hello 16
Hello 17
Hello 18
Hello 19
Hello 20
Hello 21
Hello 22
Hello 23
Hello 24
Hello 25
Hello 26
Hello 27
Hello 28
Hello 29
Hello 30
Hello 31
Hello 32
Hello 33
Hello 34
Hello 35
Hello 36
Hello 37
Hello 38
Hello 39
Hello 40
Hello 41
Hello 42
Hello 43
Hello 44
Hello 45
Hello 46
Hello 47
Hello 48
Hello 49
Hello 50
Hello 51

實現Runnable的優點

  • 從面向對象的角度來看,Thread類是一個虛擬處理機嚴格的封裝,因此只有當處理機模型修改或擴展時,才應該繼承類。正因爲這個原因和區別一個正在運行的線程的處理機、代碼和數據部分的意義,本教程採用了這種方法。

  • 由於Java技術只允許單一繼承,所以如果你已經繼承了Thread,你就不能再繼承其它任何類,例如Applet。在某些情況下,這會使你只能採用實現Runnable的方法。

  • 因爲有時你必須實現Runnable,所以你可能喜歡保持一致,並總是使用這種方法。


繼承Thread的優點

  • 當一個run()方法體現在繼承Thread類的類中,用this指向實際控制運行的Thread實例。因此,代碼不再需要使用如下控制:

Thread.currentThread().join();

而可以簡單地用:

join();

因爲代碼簡單了一些,許多Java編程語言的程序員使用擴展Thread的機制。注意:如果你採用這種方法,在你的代碼生命週期的後期,單繼承模型可能會給你帶來困難。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章