One of the challenges of developing concurrent programs in Java is the mismatch between the concurrency features offered by the platform and how developers need to think about concurrency in their programs.
Threads are the easiest way to tap the computing power of multiprocessor systems. As processor counts increase exploiting concurrency effectively will only become more important.