This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
Multithreaded programming has uses even when you are running the application on a single threaded environment. Some of the examples I am aware of are :
a. GUI programming. Say you click on a button on GUI and it triggers a background process that would take some time to complete. With multithreading the background task can be done in a separate thread and GUI can be responsive to user inputs. Without multithreading in such cases the GUI would appear frozen to the user
b. Webserver: Webservers typically serve a lot of requests, and it can span a new thread to service a request and the main thread can continue
to wait for any new incoming requests.
Multi threaded programming is useful in any situation where you need a background process to run. User interfaces need multiple threads anytime a long task is running, or the entire user interface freezes. And how about scheduled jobs, these use different threads as well.
If you split one large task into several smaller subtasks and run these in parallel you can actually decrease performance when you are not in a multi processor environment. For instance calculating the sum of a large int array (pseudo code):
If any processor gets more than one job then the overhead of context switching when another thread becomes active will cause a performance decrease.