Java、C#執行緒模型分析對比 (轉)
、都提供了面向的執行緒模型。它們都抽象出了執行緒物件,而開發人員在某個類的成員方法中實現執行緒應用邏輯。透過分離執行緒物件和執行緒方法,簡化了執行緒應用邏輯的開發。
在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
} //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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Muduo 多執行緒模型對比執行緒模型
- webrtc執行緒模型分析Web執行緒模型
- RxJava 執行緒模型分析RxJava執行緒模型
- Java 執行緒池執行原理分析Java執行緒
- netty reactor執行緒模型分析NettyReact執行緒模型
- Java語言深入 多執行緒程式模型研究(轉)Java執行緒模型
- Java 執行緒記憶體模型Java執行緒記憶體模型
- c#執行緒-執行緒同步C#執行緒
- 泛說 "COM執行緒模型" (轉)執行緒模型
- Java多執行緒之—Synchronized方式和CAS方式實現執行緒安全效能對比Java執行緒synchronized
- JAVA執行緒dump的分析Java執行緒
- 執行緒模型執行緒模型
- Java多執行緒記憶體模型Java執行緒記憶體模型
- 突破Java面試(20)-Redis執行緒模型Java面試Redis執行緒模型
- Java多執行緒-程式執行堆疊分析Java執行緒
- java資料——執行緒(轉)Java執行緒
- [轉]Java執行緒詳解Java執行緒
- C#執行緒C#執行緒
- java併發筆記之java執行緒模型Java筆記執行緒模型
- win32多執行緒和C++11多執行緒對比Win32執行緒C++
- Java執行緒池原理及分析Java執行緒
- Java多執行緒下載分析Java執行緒
- C#多執行緒(6):執行緒通知C#執行緒
- Redis執行緒模型的原理分析蒼癘Redis執行緒模型
- Dubbo RPC執行緒模型 原始碼分析RPC執行緒模型原始碼
- Hadoop的Server及其執行緒模型分析HadoopServer執行緒模型
- Hadoop 的 Server 及其執行緒模型分析HadoopServer執行緒模型
- java執行緒程式設計(一):執行緒基礎(轉)Java執行緒程式設計
- Java多執行緒——執行緒Java執行緒
- Dubbo執行緒模型執行緒模型
- WPF執行緒模型執行緒模型
- redis執行緒模型Redis執行緒模型
- 玩轉java多執行緒 之多執行緒基礎 執行緒狀態 及執行緒停止實戰Java執行緒
- Java多執行緒之記憶體模型Java執行緒記憶體模型
- Java 多執行緒共享模型之管程(上)Java執行緒模型
- C#多執行緒之旅(3):執行緒池C#執行緒
- C#中的執行緒(三)多執行緒C#執行緒
- Java執行緒狀態轉換Java執行緒