I know that now that most processors have two or more cores, multicore programming is all the rage. Is there functionality to utilize this in Java? I know that Java has a Thread class, but I also know this was around a long time before multicores became popular. If I can make use of multiple cores in Java, what class/technique would I use?
Does Java have support for multicore processors/parallel processing?
Yes. It also has been a platform for other programming languages where the implementation added a "true multithreading" or "real threading" selling point. The G1 Garbage Collector introduced in newer releases also makes use of multi-core hardware.
Try to get a copy of the Java Concurrency in Practice book.
If I can make use of multiple cores in Java, what class/technique would I use?
Utility classes commonly useful in concurrent programming. This package includes a few small standardized extensible frameworks, as well as some classes that provide useful functionality and are otherwise tedious or difficult to implement. Here are brief descriptions of the main components.
Executor is a simple standardized interface for defining custom thread-like subsystems, including thread pools, asynchronous IO, and lightweight task frameworks.
ConcurrentLinkedQueue class supplies an efficient scalable thread-safe non-blocking FIFO queue.
TimeUnit class provides multiple granularities (including nanoseconds) for specifying and controlling time-out based operations. Most classes in the package contain operations based on time-outs in addition to indefinite waits.
Four classes aid common special-purpose synchronization idioms.
Semaphore is a classic concurrency tool.
CountDownLatch is a very simple yet very common utility for blocking until a given number of signals, events, or conditions hold. [...]
Besides Queues, this package supplies a few Collection implementations designed for use in multithreaded contexts:
This also comes in handy if you want to match the number of threads to the number of available CPUs for example:
int n = Runtime.getRuntime().availableProcessors();