Thread VB.Net

Imports System
Imports System.Threading
Public Class MainClass
   Shared Sub Main()
      ' create shared object used by threads
      Dim holdInteger As New UnsynchronizedIntegerBuffer()
      ' Random object used by each thread
      Dim randomObject As New Random()
      ' create Producer and Consumer objects
      Dim producer As New CProducer(holdInteger, randomObject)
      Dim consumer As New CConsumer(holdInteger, randomObject)
      ' create threads for producer and consumer  
      ' set delegates for each thread
      Dim producerThread As New Thread(AddressOf producer.Produce)
      Dim consumerThread As New Thread(AddressOf consumer.Consume)
      ' name each thread
      producerThread.Name = "Producer"
      consumerThread.Name = "Consumer"
      ' start each thread
      producerThread.Start()
      consumerThread.Start()
   End Sub ' Main
End Class
' Produces integers from 1 to 4 and places them in unsynchronized buffer.
Public Class CProducer
   Private sharedLocation As UnsynchronizedIntegerBuffer
   Private randomSleepTime As Random
   Public Sub New(ByVal sharedObject As _
      UnsynchronizedIntegerBuffer, ByVal randomObject As Random)
      sharedLocation = sharedObject
      randomSleepTime = randomObject
   End Sub
   Public Sub Produce()
      Dim count As Integer
      For count = 1 To 4
         Thread.Sleep(randomSleepTime.Next(3000))
         sharedLocation.Buffer = count
      Next
      Console.WriteLine(Thread.CurrentThread.Name & _
         " done producing." & vbCrLf & "Terminating " & _
         Thread.CurrentThread.Name & ".")
   End Sub
End Class
' Consumes 4 integers from unsynchronized buffer.
Public Class CConsumer
   Private sharedLocation As UnsynchronizedIntegerBuffer
   Private randomSleepTime As Random
   Public Sub New(ByVal sharedObject As _
      UnsynchronizedIntegerBuffer, ByVal randomObject As Random)
      sharedLocation = sharedObject
      randomSleepTime = randomObject
   End Sub ' New
   Public Sub Consume()
      Dim count, sum As Integer
      For count = 1 To 4
         Thread.Sleep(randomSleepTime.Next(3000))
         sum += sharedLocation.Buffer
      Next
      Console.WriteLine(Thread.CurrentThread.Name & _
         " read values totaling: " & sum & "." & vbCrLf & _
         "Terminating " & Thread.CurrentThread.Name & ".")
   End Sub ' Consume
End Class
' Definition of a shared integer without synchronization mechanisms.
Public Class UnsynchronizedIntegerBuffer
   Private mBuffer As Integer = -1
   Property Buffer() As Integer
      Get
         Console.WriteLine(Thread.CurrentThread.Name & _
            " reads " & mBuffer)
         Return mBuffer
      End Get
      Set(ByVal Value As Integer)
         Console.WriteLine(Thread.CurrentThread.Name & _
            " writes " & Value)
         mBuffer = Value
      End Set
   End Property ' Buffer
End Class