VB.NET中多線程程序開發(fā)之多線程的特點

字號:

在寫的一則日志中,對 VB.NET 中的多線程程序有了簡單的認識,接下來,考試大將會在這里發(fā)布一系列關于 VB.NET 中多線程的開發(fā)知識。
    多線程程序的特點
    每一個進程中,可以包含多個線程,加入收藏 按照微軟官方文檔的說明,在 Windows XP 中每個進程可以包含最多 2000 個線程。實際上,線程的數量是要受到內存的限制的,當然,并不是說線程越多越好。假設,現在系統中有兩個進程在運行,進程A 僅有一個線程,即主線程,而進程B 有5 個線程,那么當前系統中的線程數,共有 6 個,操作系統會為每個線程分配時間片,這樣進程A 獲取到的時間片僅為 1/6,而進程B 獲取到的時間片為 5/6,所以進程B 的執(zhí)行就會影響到系統的整體運行,因此在線程數不能太多,要符合程序本身的要求。線程有以下幾個特點:
    1. 分配給線程的時間不會得到保證
    2. 線程的激活順序沒有保證
    3. 不能認為發(fā)生在不同線程上的事件或操作是同步的,如果要想同步,那么必須進行顯式的同步操作。
    下面,我們通過一個例子來理解線程的上述三個特點:
    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í)行的結果如圖(每次執(zhí)行結果都會有變化):
    我們可以看到,M1 方法和 M2 方法執(zhí)行的順序是隨機的,它不受程序控制,由操作系統的特征決定(時間片的分配方式),有些時候,這個結果并不是我們想要的,那么,如果才能靈活地控制線程的啟動與執(zhí)行呢?在下一節(jié)中,我們將會解決這一問題——封裝線程。