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