Thread VB.Net Tutorial

Imports System.Threading
Module Module1
    Public Buffer As Integer
    Public BufferEmpty As Boolean = True
    Public ProducerConsumerLock As Object = New Object()
    Sub Producer()
        Dim Value As Integer = 0
        Do
            SyncLock ProducerConsumerLock
                If (BufferEmpty) Then
                    BufferEmpty = False
                    Buffer = Value
                    If (Value = 0) Then
                        Value = 1
                    Else
                        Value = 0
                    End If
                    Console.WriteLine("Producer: " & Buffer)
                End If
            End SyncLock
        Loop While (True)
    End Sub
    Sub Consumer()
        Dim Value As Integer
        Do
            SyncLock ProducerConsumerLock
                If (Not BufferEmpty) Then
                    BufferEmpty = True
                    Thread.CurrentThread.Sleep(1000)
                    Value = Buffer
                    Console.WriteLine("Consumer: " & Value)
                End If
            End SyncLock
        Loop While (True)
    End Sub
    Sub Main()
        Dim ProducerThread As Thread = New Thread(AddressOf Producer)
        Dim ConsumerThread As Thread = New Thread(AddressOf Consumer)
        ProducerThread.Start()
        ConsumerThread.Start()
    End Sub
End Module
Producer: 0
Consumer: 0
Producer: 1
^CTerminate batch job (Y/N)? n