For numerous years developers didn't need to worry about the complexity of creating multi-threaded applications in the PC World. The availability of hardware and operating systems that supported multi-threaded applications just didn't exist.
Over the last couple of years this has now all changed. Multi-processors and multi-threaded support built into the operating systems of even the smallest computers increases the requirements for creating code that can take advantage of all that power and performance.
You can now, not only create pieces of applications that run concurrently, but you can also create situations where different pieces of the applications overlap, use asynchronus and synchronus services and even tap into different physical processing power at different times.
If you consider a former tool to be one instrument (like a violin), then in today's development world, whole orchestras (violins, cellos, trumpets, sax, etc.) are being managed with symphonies of success being deployed.
Needless to say the failures can make quite a racket and the people who can detangle and fix this racket are a special breed.
Tools, Tools, and more Tools.
The Microsoft Research teams have been looking at some of the concurrency problems and are interviewed on Channel 9 about their discoveries. Microsoft Research: Tools to Help Resolve Concurrency Problems
Two little applications might be of interest for further analysis and learning. These include Cuzz and Featherlight