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.
Java Concurrency in Practice
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?
java.util.concurrent
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.
Executors
Executor
is a simple standardized interface for defining custom thread-like subsystems, including thread pools, asynchronous IO, and lightweight task frameworks.
Queues
The java.util.concurrent ConcurrentLinkedQueue
class supplies an efficient scalable thread-safe non-blocking FIFO queue.
Timing
The 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.
Synchronizers
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. [...]
Concurrent Collections
Besides Queues, this package supplies a few Collection implementations designed for use in multithreaded contexts: ConcurrentHashMap
, CopyOnWriteArrayList
, and CopyOnWriteArraySet
.
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();
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…