I had been fumbling with a good demo for thread synchronization for a while and finally came up with a good demo in VB.NET 2003 illustrating the value of thread synchronization. It calls a sub on three different threads simultaneously. The sub increments a counter in a for/next loop. There are two versions, a raw unsynchronized version and a version that calls SyncLock to synchronize access to the counter.
http://www.franklins.net/dotnet