Java是否支持多核处理器/并行处理?

Raf*_*ler 36 java parallel-processing multithreading multicore

我知道现在大多数处理器都有两个或更多内核,多核编程风靡一时.是否有在Java中使用它的功能?我知道Java有一个Thread类,但我也知道这在很长一段时间之后才开始流行.如果我可以在Java中使用多个内核,我会使用哪种类/技术?

bak*_*kal 42

Java是否支持多核处理器/并行处理?

是.它也是其他编程语言的平台,其实现增加了"真正的多线程"或"真正的线程"卖点.新版本中引入的G1垃圾收集器也使用了多核硬件.

Java并发实践

尝试获取Java Concurrency in Practice一书的副本.


如果我可以在Java中使用多个内核,我会使用哪种类/技术?

java.util.concurrent

实用类通常在并发编程中有用 .该软件包包括一些小的标准化可扩展框架,以及一些提供有用功能的类,以及其他繁琐或难以实现的类.以下是主要组件的简要说明.

执行人

Executor 是一个简单的标准化接口,用于定义自定义线程类子系统,包括线程池,异步IO和轻量级任务框架.

队列

java.util.concurrent ConcurrentLinkedQueue类提供有效的可伸缩线程安全非阻塞FIFO队列.

定时

TimeUnit类提供了用于指定和控制基于超时操作的多个粒度(包括毫微秒).除了无限期等待之外,程序包中的大多数类都包含基于超时的操作.

同步器

四个类有助于常见的专用同步习语.Semaphore是一种经典的并发工具.CountDownLatch在给定数量的信号,事件或条件成立之前,阻塞是一种非常简单但非常常见的阻塞实用程序.[...]

并发收藏

除了队列,这个包提供了几个集合实现在多线程环境中设计用于:ConcurrentHashMap,CopyOnWriteArrayList,和CopyOnWriteArraySet.


如果要将线程数与可用CPU数相匹配,这也会派上用场,例如:

int n = Runtime.getRuntime().availableProcessors();
Run Code Online (Sandbox Code Playgroud)


Gia*_*ian 9

在大多数Java实现中,您可以依赖Java线程作为真正的OS线程.因此,如果您使用Thread类,操作系统将负责确保工作负载分布在多个核心上.

操作系统线程长时间处于商品多核系统之前,所以这并不是真正的问题.多核系统的唯一区别是允许时间复用的操作系统线程作为多核上的真正并发线程来执行.


Ric*_*rij 7

Java 5引入了java.util.concurrent包,它有助于构建可以从多核系统中受益的并发应用程序.这个包远远超出了Java 1.4及更早版本中提供的多线程功能(如synchronized,wait,notify等).

Java 7的提议包括Fork/Join框架,以便更容易地使用多核系统.