全面講解VB.NET多線程應(yīng)用程序
VB.NET多線程有很多值得學(xué)習(xí)的地方,這里我們主要介紹VB.NET多線程應(yīng)用程序,包括介紹Interlocked.Decrement(num)分別使名為num的共享變量遞增或遞減等方面
VB.NET多線程應(yīng)用程序
術(shù)語.NET Framework指的是構(gòu)成Microsoft .NET平臺開發(fā)基礎(chǔ)的一組技術(shù)。這一組中的關(guān)鍵技術(shù)是運行時(runtime)和類庫。 運行時負(fù)責(zé)管理代碼,在執(zhí)行時向它提供服務(wù),這與Visual Basic 6.0運行時的作用類似。.NET程序設(shè)計語言-包括Visual Basic .NET、Microsoft Visual C#、C++管理的擴展,以及多種來自不同開發(fā)商的程序設(shè)計語言-通過一組公共的統(tǒng)一類來利用各種服務(wù)和特性。 .NET統(tǒng)一類提供了創(chuàng)建應(yīng)用程序的基礎(chǔ),而不管你使用何種語言。無論你只是簡單地連接一個字符串,還是創(chuàng)建一個Windows服務(wù)或多層的基于網(wǎng)絡(luò)的應(yīng)用程序,你都要用到這些統(tǒng)一類。
統(tǒng)一類為訪問平臺的功能性提供了一種一致的方法。一旦你學(xué)會了使用類庫,你就會發(fā)現(xiàn)所有任務(wù)都遵循同一個一致的體系結(jié)構(gòu)。要編寫自己的應(yīng)用程序,你無需學(xué)習(xí)和掌握不同的API體系結(jié)構(gòu)。 由于.NET Framework,部署VB.NET應(yīng)用變得更容易了。與VB.NET應(yīng)用程序不同,你無需配置各種相關(guān)性,如單獨的數(shù)據(jù)訪問庫、XML語法分析器和網(wǎng)絡(luò)API,因為所有這些功能都是.NET Framework的組成部分。通過在統(tǒng)一的、集成的框架上創(chuàng)建自己的應(yīng)用程序,你可以實現(xiàn)學(xué)習(xí)這種框架所花費時間的最大回報,并且你將擁有更多容易部署和使用的健壯的應(yīng)用程序。
.NET Framework的一個很重要的特性是,可以在不使用第三方工具或不支持的Visual Basic技巧情況下,使用創(chuàng)建VB.NET多線程應(yīng)用程序。.NET Framework的多線程支持是由System.Threading名稱空間中的類和接口提供的,因此所有的.NET語言都能夠以相同的方式創(chuàng)建和處理線程。System.Threading.Thread是一個核心類,提供了對創(chuàng)建和控制線程的支持。要創(chuàng)建一個線程,你可以創(chuàng)建一個新的System.Threading.Thread對象,將構(gòu)造函數(shù)傳遞給ThreadStart代理。這個代理提供了這個線程開始執(zhí)行的方法。當(dāng)你準(zhǔn)備啟動這個新的線程時,可以調(diào)用Thread.Start()。
當(dāng)你開始創(chuàng)建多線程應(yīng)用程序時,你很快就會認(rèn)識到需要控制對共享資源的訪問,如共享的類變量。.NET Framework還包括幾個類和數(shù)據(jù)類型,你可以使用它們對兩個線程執(zhí)行的動作進行同步。 在最簡單的情況中,你由一個需要從不同的線程中進行更新的共享變量。要這樣做,你可以使用System.Threading.Interlocked類。例如,你可以通過編寫Interlocked.Increment(num)
Interlocked.Decrement(num)分別使名為num的共享變量遞增或遞減。你還可以使用Interlocked將變量設(shè)為某一特定值,或檢查兩個變量是否相等。除了這種簡單情況以外,你可以使用.NET Framework類來執(zhí)行更復(fù)雜的線程同步,如事件和互斥體的同步-所有都來自于.NET Framework內(nèi)部,而無須使用Win32 API。你創(chuàng)建了一個新線程,將它傳遞給一個ThreadStart代理。然后調(diào)用Thread.Start()啟動這個線程。你可以通過調(diào)用Thread.Stop()來中止這個線程,然后調(diào)用Thread.Join()等待它完成關(guān)閉操作。一個線程可以使用System.Threading.Interlocked來使變量遞增或遞減。 此外,.NET Framework提供了一個方便的機制來對工作排隊,并將起分配給線程池中的某個線程。在處理多個并發(fā)工作項目或工作請求的服務(wù)器應(yīng)用程序中,這非常有用。例如,對于等待輸入文件,然后將它們導(dǎo)入到數(shù)據(jù)庫中去的應(yīng)用程序,可能會對每個輸入文件進行排隊,以在線程池中的某個單獨的線程上進行處理。System.Threading.ThreadPool類允許你使用共享的QueueUserWorkItem方法對工作進行排隊。以前要這樣做,你必須得創(chuàng)建和管理自己的線程池。你又需要在基礎(chǔ)設(shè)施工作而不是在解決商務(wù)問題上花大量的時間和精力。
【編輯推薦】