Java、C#執行緒模型分析對比 (轉)

amyz發表於2007-08-15
Java、C#執行緒模型分析對比 (轉)[@more@]

  、都提供了面向的執行緒模型。它們都抽象出了執行緒物件,而開發人員在某個類的成員方法中實現執行緒應用邏輯。透過分離執行緒物件和執行緒方法,簡化了執行緒應用邏輯的開發。

在Java中開發執行緒有兩種方法。第一種方法是由Thread派生一個執行緒類,實現run方法,並Thread.start方法啟動執行緒,如:

class MyThread extends Thread { //建立執行緒類:namespace prefix = o ns = "urn:schemas--com::office" />

public void run() {…} //執行緒方法

}

MyThread aThread = new MyThread(); //建立一個執行緒物件

aThread.start() ; //啟動執行緒

第二種方法是透過實現Runable介面建立一個可類,並利用一個Thread物件來啟動執行緒,如:

  class MyRunable implements Runnable{

public void run() {…} //執行緒方法

}

MyRunable aRunable = new MyRunable(); //建立一個可執行物件

  Thread aThread = new Thread(aRunable);    //建立一個執行緒物件,並與可執行物件關聯

  aThread.start()  ;  //啟動執行緒

C#的執行緒模型將執行緒物件和執行緒方法分離得更徹底,它可將任何一個原型為void( )的公有類成員方法(靜態或非靜態)用作執行緒方法;另外執行緒啟動時還指定一個提供執行緒方法的物件(該物件提供執行緒應用邏輯所需的各種資訊)。下面是一個簡單的例子:

using System;

using System.Threading;

public class ThreadWork {  //ThreadWork不顯式繼承任何類,DoWork可作為執行緒方法

  public void DoWork() { for(int i = 0; i<10 ;i++) Console.WriteLine("Working thread..."); }   //End of DoWork

}   //End of ThreadWork

class ThreadTest{

  public static void Main() {  //將物件aThread 的DoWork方法作為執行緒方法執行

ThreadWork aThread = new ThreadWork();

ThreadStart myThreadDelegate = new ThreadStart(aThread.DoWork);  //指定執行緒方法

Thread myThread = new Thread(myThreadDelegate);  //建立執行緒物件

myThread.Start();  //啟動執行緒

  }   //End of Main

  }  //End of  ThreadTest

開發人員最關心的是如何實現執行緒方法。Java執行緒模型提供兩種方法來實現執行緒方法,過載Runable.run方法或者過載Thread.run方法。開發人員可根據具體的應用場合選擇合適的基類(Runable或者Thread),這是Java執行緒模型的一個優點。另外可以看到,Java執行緒模型中只能在Runable或Thread的子類中實現執行緒方法(即子類的run方法),而且每個子類只能實現一個執行緒方法。C#執行緒模型由於允許將任何一個原型為void( )的公有類成員方法(靜態或非靜態)用作執行緒方法,因此它實際上允許在任何一個類(不要求這個類是某個類的子類)中實現執行緒方法,而且同一個類中可以實現多個執行緒方法。物件導向的執行緒模型有兩個要素:執行緒物件和執行緒方法。執行緒物件封裝執行緒本身相關的邏輯,如執行緒的建立、銷燬等等。而執行緒方法就是執行緒物件實際執行的任務。利用物件導向執行緒模型進行多執行緒開發時,這樣來思考問題會更自然:現在我有一項工作(即設計了一個執行緒方法),找一個工人(執行緒物件)來完成這個工作吧。所以我們認為C#的執行緒模型更靈活,而這種靈活性使得開發人員能夠將結構組織的更加清晰、合理。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958079/,如需轉載,請註明出處,否則將追究法律責任。

相關文章