VB.Net/Thread/Thread Synchronize
Содержание
Synchronize Thread Demo
Imports System
Imports System.Threading
Imports System.Text
Imports System.Windows.Forms
Public Class MainClass
Public Shared Sub Main()
Dim myHouse As New House()
End Sub
End Class
Public Class House
Dim house As String = New String("Lock")
Public Sub New()
Dim aThreadStart As Threading.ThreadStart
Dim aThread As Thread
Dim i As Integer
For i = 0 To 10
aThreadStart = New ThreadStart(AddressOf ChangeTemperature)
aThread = New Thread(aThreadStart)
aThread.Name = CStr(i) & ""th room"
aThread.Start()
Next
End Sub
Private Sub ChangeTemperature()
SyncLock (house)
Console.WriteLine("Checking 1")
Console.WriteLine("Checking 2")
Console.WriteLine("Checking 3")
Try
Thread.Sleep(1000)
Catch E As ThreadInterruptedException
"thread ended
End Try
Console.WriteLine("Checking 4")
Console.WriteLine("Checking 5")
Console.WriteLine("Checking 6")
Console.WriteLine("Checking 7")
Console.WriteLine("Checking 8")
Console.WriteLine("Checking 9")
Console.WriteLine("Checking 10")
End SyncLock
End Sub
End Class
Thread without Synchronizing
Imports System
Imports System.Threading
Imports System.Text
Imports System.Windows.Forms
Public Class MainClass
Public Shared Sub Main()
Dim myHouse As New House()
End Sub
End Class
Public Class House
Dim house As String = New String("Lock")
Public Sub New()
Dim aThreadStart As Threading.ThreadStart
Dim aThread As Thread
Dim i As Integer
For i = 0 To 10
aThreadStart = New ThreadStart(AddressOf ChangeTemperature)
aThread = New Thread(aThreadStart)
aThread.Name = CStr(i) & ""th room"
aThread.Start()
Next
End Sub
Private Sub ChangeTemperature()
" SyncLock (house)
Console.WriteLine("Checking 1")
Console.WriteLine("Checking 2")
Console.WriteLine("Checking 3")
Try
Thread.Sleep(1000)
Catch E As ThreadInterruptedException
"thread ended
End Try
Console.WriteLine("Checking 4")
Console.WriteLine("Checking 5")
Console.WriteLine("Checking 6")
Console.WriteLine("Checking 7")
Console.WriteLine("Checking 8")
Console.WriteLine("Checking 9")
Console.WriteLine("Checking 10")
" End SyncLock
End Sub
End Class
Two threads without SyncLock
Imports System
Imports System.Drawing
Imports System.Threading
Imports System.Windows.Forms
Imports System.IO
public class MainClass
Shared counter As Integer
Shared locker As Object = New Object()
Shared Sub Main()
Dim aThread As Thread = New Thread(AddressOf Calculate)
Dim bThread As Thread = New Thread(AddressOf Calculate)
aThread.Start()
bThread.Start()
End Sub
Shared Sub Calculate()
Console.WriteLine("Thread " & Thread.CurrentThread.GetHashCode & " woke up. Counter=" & counter)
" SyncLock locker
Console.WriteLine("In Locker")
Console.WriteLine("1")
Console.WriteLine("2")
Dim i As Integer = 0
Dim j As Integer = 0
For i = 0 To 10000
For j = 0 To 10000
Next j
Next i
Console.WriteLine("3")
Console.WriteLine("4")
Console.WriteLine("5")
" End SyncLock
Console.WriteLine("Out Locker")
Console.WriteLine("Thread " & Thread.CurrentThread.GetHashCode & " woke up. Counter=" & counter)
End Sub
End Class
Two threads with SyncLock
Imports System
Imports System.Drawing
Imports System.Threading
Imports System.Windows.Forms
Imports System.IO
public class MainClass
Shared counter As Integer
Shared locker As Object = New Object()
Shared Sub Main()
Dim aThread As Thread = New Thread(AddressOf Calculate)
Dim bThread As Thread = New Thread(AddressOf Calculate)
aThread.Start()
bThread.Start()
End Sub
Shared Sub Calculate()
Console.WriteLine("Thread " & Thread.CurrentThread.GetHashCode & " woke up. Counter=" & counter)
SyncLock locker
Console.WriteLine("In Locker")
Console.WriteLine("1")
Console.WriteLine("2")
Dim i As Integer = 0
Dim j As Integer = 0
For i = 0 To 10000
For j = 0 To 10000
Next j
Next i
Console.WriteLine("3")
Console.WriteLine("4")
Console.WriteLine("5")
End SyncLock
Console.WriteLine("Out Locker")
Console.WriteLine("Thread " & Thread.CurrentThread.GetHashCode & " woke up. Counter=" & counter)
End Sub
End Class