Thread VB.Net

Imports System.Threading
Module Module1
    Public Buffer As Integer
    Public BufferEmpty As Boolean = True
    Public MonitorLock As Object = New Object()
    Sub Producer()
        Dim Value As Integer = 0
        Do
            Monitor.Enter(MonitorLock)
            If (BufferEmpty) Then
                BufferEmpty = False
                Buffer = Value
                If (Value = 0) Then
                    Value = 1
                Else
                    Value = 0
                End If
                Console.WriteLine("Producer: " & Buffer)
            End If
            Monitor.Exit(MonitorLock)
        Loop While (True)
    End Sub
    Sub Consumer()
        Dim Value As Integer
        Do
            Monitor.Enter(MonitorLock)
            If (Not BufferEmpty) Then
                BufferEmpty = True
                Thread.CurrentThread.Sleep(1000)
                Value = Buffer
                Console.WriteLine("Consumer: " & Value)
            End If
            Monitor.Exit(MonitorLock)
        Loop While (True)
    End Sub
    Sub Main()
        Dim ProducerThread As Thread
        Dim ConsumerThread As Thread
        ProducerThread = New Thread(AddressOf Producer)
        ConsumerThread = New Thread(AddressOf Consumer)
        ProducerThread.Start()
        ConsumerThread.Start()
    End Sub
End Module