Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does Java have support for multicore processors/parallel processing?

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?

like image 253
Rafe Kettler Avatar asked Jul 25 '10 18:07

Rafe Kettler


People also ask

Does Java support multicore?

Java will benefit from multiple cores, if the OS distribute threads over the available processors. JVM itself do not do anything special to get its threads scheduled evenly across multiple cores.

Does Java have parallelism?

Within a Java application, you work with several threads to achieve parallel processing or asynchronous behavior. Concurrency promises to perform certain tasks faster as these tasks can be divided into subtasks and these subtasks can be executed in parallel.

What is multicore parallel programming?

Multicore processing means code working on more than one core of a single CPU chip and is a subset of Parallel Processing and Multicore utilization means that efficient usage of CPU.

Does programming use multi-core?

Basics of Multicore ProgrammingMulticore programming helps you create concurrent systems for deployment on multicore processor and multiprocessor systems. A multicore processor system is a single processor with multiple execution cores in one chip.


2 Answers

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(); 
like image 53
bakkal Avatar answered Oct 15 '22 02:10

bakkal


In most Java implementations, you can rely on Java threads being real OS threads. As a result, the operating system will take care of making sure that the workload is distributed across multiple cores if you use the Thread class.

Operating system threads pre-date commodity multicore systems by a long time, so that's not a concern really. The only difference multicore systems made was to allow time-multiplexed operating system threads to be executed as truly concurrent threads on multiple cores.

like image 34
Gian Avatar answered Oct 15 '22 00:10

Gian