The big talk lately seems to be about parallelism and writing multithreaded code to take advantage of multi-core/threaded processors. While this is a great way to do more tasks at once it is not usually required for the common line of business apps most of us are writing.
Multi-threading is great when you have a big job that can be split appart into chunks for processing on multiple threads. Gaming for instance can benefit a lot from this as gaming is usually a CPU intensive activity. If you are writing a simple app to get things from a database and display it on the screen, multithreading will probably not make a difference in the speed of your app. In fact multithreading may slow down your application as you now have to dedicate CPU resources to creating, managing, and monitoring of threads and that is not free.
Where I love multi-core machines is on boxes that are doing more than one thing. If I am running four non-threaded CPU applications on a four core box then they should perform almost like they were on their own CPU. I almost view having multicore boxes as freeing us from having to write multithreaded code as we are only consuming one core with our apps which leaves cores for other applications. Now I am not saying write sloppy code, just trying to frame what this multicore movement in the industry does for us.
The other thing to realize is that writing multithreaded applications is hard. Worrying about locking, syncing, and race conditions are something I would rather do without. It takes a lot of carefull thought and planning to do it right, and even when you do, missing something can have some drastic consequences. Multi-threaded code is not only hard to design, but hard to debug and test as well.
If you think that you need a multithreaded app then really think about it as it can be a tough road to walk.