四、線程類的實現
要想使網絡蜘蛛在有限的硬件環境下盡可能地提高下載速度。最廉價和快捷的方法就是使用多線程。在.Net framework2.0中提供了豐富的線程功能。其中的核心線程類是Thread。一般可使用如下的代碼創建並運行一個線程:
在C#中使用線程的演示代碼
private void fun()
{
// 線程要執行的代碼
}
public void testThread()
{
Thread thread;
thread = new Thread(fun); // 創建一個Thread對象,並將fun設為線程運行的方法
thread.Start(); // 運行一個線程
}
雖然上面的代碼比較簡單地創建並運行了一個線程,但是這段代碼看起來仍然不夠透明,也就是客戶端在調用線程時仍然需要顯式地使用Thread類。下面我們來實現一個用於創建線程的MyThread類。C#中的任何類只需要繼承這個類,就可以自動變成一個線程類。MyThread類的代碼如下:
MyThread類的實現代碼
// 任何C#類繼承MyThread後,就會自動變成一個線程類
class MyThread
{
private Thread thread;
public MyThread()
{
thread = new Thread(run); // 創建Thread對象
}
// 用於運行線程代碼的方法,MyThread的子類必須覆蓋這個方法
public virtual void run()
{
}
public void start()
{
thread.Start(); // 開始運行線程,也就是開始執行run方法
}
// 使當前線程休眠millisecondsTimeout毫秒
public void sleep(int millisecondsTimeout)
{
Thread.Sleep(millisecondsTimeout);
}
}
我們可參照如下的代碼使用MyThread類:
測試的ThreadClass類的代碼
class ThreadClass : MyThread
{
public override void run()
{
// 要執行的線程代碼
}
}
// 測試ThreadClass類
public void testThreadClass()
{
ThreadClass tc = new ThreadClass();
tc.start(); // 開始運行線程,也就是執行run方法
}
各位讀者可以看看,上面的代碼是不是要比直接使用Thread類更方便、直觀、易用,還有些面向對象的感覺!