A program that has two or parts can run concurrently. Each part is a thread. So this is a specialised form multitasking. Process based multitasking is heavyweight and use seperate address spaces. It gives the big picture of the application. JVM has control as it handled by os level. Thread based is light weight and use same address space. So inter communication between threads is easy. This gives detail view of the part it's running. JVM has full control. Multithreading reduces idle time by running another when one is waiting for something like slow network operation. And this avoids application being blocked for something. In a single core CPU no actual parallel threading is happening but CPU time is allocated between threads. Running thread can be suspended and resumed. Can be blocked when waiting. When terminated can't resume. Threads has priorities. Higher priority threads can take cpu power by pushing low or low priority threads can volunteeraly allow if its blocked...