Multithreading in Java refers to the concurrent execution of two or more parts of a program to maximize the utilization of the CPU. Each part of such program is called a thread, and each thread defines a separate path of execution.
Consider an example in which you are building a text editor. One thread might look after the user interface, the second thread might be saving the document after every few seconds, and the third thread might be fetching and displaying help information, all concurrently.
Multithreading can be very beneficial and can be used:
1. When tasks are independent of each other and can run in parallel without blocking each other.
2. To utilize the CPU better, as single-threaded programs may not fully utilize the CPU because they would be waiting for I/O or user interactions etc.
3. To make the programs more responsive. For example, a text editor can be saving a file in the background while the user continues to edit the document.
However, multithreading should be avoided:
1. When tasks are not independent and must share common resources. This can lead to issues of deadlocks and race conditions.
2. Multithreaded programs can be harder to design, write, debug and maintain.
3. Multithreading may not yield any benefits if the program is I/O bound, instead of CPU bound, as the I/O operations would then become the bottleneck.
Remember, if used correctly, multithreading can greatly improve the efficiency of a program but if used incorrectly, it can lead to unpredictable results. It's all about how and where you use it.