VB.NET中多線程程序開(kāi)發(fā)之多線程的特點(diǎn)

字號(hào):

在寫的一則日志中,對(duì) VB.NET 中的多線程程序有了簡(jiǎn)單的認(rèn)識(shí),接下來(lái),考試大將會(huì)在這里發(fā)布一系列關(guān)于 VB.NET 中多線程的開(kāi)發(fā)知識(shí)。
    多線程程序的特點(diǎn)
    每一個(gè)進(jìn)程中,可以包含多個(gè)線程,加入收藏 按照微軟官方文檔的說(shuō)明,在 Windows XP 中每個(gè)進(jìn)程可以包含最多 2000 個(gè)線程。實(shí)際上,線程的數(shù)量是要受到內(nèi)存的限制的,當(dāng)然,并不是說(shuō)線程越多越好。假設(shè),現(xiàn)在系統(tǒng)中有兩個(gè)進(jìn)程在運(yùn)行,進(jìn)程A 僅有一個(gè)線程,即主線程,而進(jìn)程B 有5 個(gè)線程,那么當(dāng)前系統(tǒng)中的線程數(shù),共有 6 個(gè),操作系統(tǒng)會(huì)為每個(gè)線程分配時(shí)間片,這樣進(jìn)程A 獲取到的時(shí)間片僅為 1/6,而進(jìn)程B 獲取到的時(shí)間片為 5/6,所以進(jìn)程B 的執(zhí)行就會(huì)影響到系統(tǒng)的整體運(yùn)行,因此在線程數(shù)不能太多,要符合程序本身的要求。線程有以下幾個(gè)特點(diǎn):
    1. 分配給線程的時(shí)間不會(huì)得到保證
    2. 線程的激活順序沒(méi)有保證
    3. 不能認(rèn)為發(fā)生在不同線程上的事件或操作是同步的,如果要想同步,那么必須進(jìn)行顯式的同步操作。
    下面,我們通過(guò)一個(gè)例子來(lái)理解線程的上述三個(gè)特點(diǎn):
    Imports System.Threading
    Module MyThread
    Sub Main()
    Dim thA As New Thread(New ThreadStart(AddressOf M1))
    Dim thB As New Thread(AddressOf M2)
    thB.Start()
    thA.Start()
    Console.Read()
    End Sub
    Public Sub M1()
    Dim intCount As Integer
    For intCount=1 To 100
    Console.WriteLine("M1 方法正在執(zhí)行 {0}...",intCount)
    Next
    End Sub
    Public Sub M2()
    Dim intCount As Integer
    For intCount=1 To 100
    Console.WriteLine("M2 方法正在執(zhí)行 {0}...",intCount)
    Next
    End Sub
    End Module
    程序編譯執(zhí)行的結(jié)果如圖(每次執(zhí)行結(jié)果都會(huì)有變化):
    我們可以看到,M1 方法和 M2 方法執(zhí)行的順序是隨機(jī)的,它不受程序控制,由操作系統(tǒng)的特征決定(時(shí)間片的分配方式),有些時(shí)候,這個(gè)結(jié)果并不是我們想要的,那么,如果才能靈活地控制線程的啟動(dòng)與執(zhí)行呢?在下一節(jié)中,我們將會(huì)解決這一問(wèn)題——封裝線程。