Java 是否支持多核处理器/并行处理?
我知道现在大多数处理器都有两个或更多内核,多核编程风靡一时。在Java中是否有利用此功能的功能?我知道Java有一个Thread类,但我也知道这在多核变得流行之前的很长一段时间。如果我可以在Java中使用多个内核,我将使用什么类/技术?
我知道现在大多数处理器都有两个或更多内核,多核编程风靡一时。在Java中是否有利用此功能的功能?我知道Java有一个Thread类,但我也知道这在多核变得流行之前的很长一段时间。如果我可以在Java中使用多个内核,我将使用什么类/技术?
Java 是否支持多核处理器/并行处理?
是的。它也是其他编程语言的平台,其中实现增加了“真正的多线程”或“真正的线程”卖点。新版本中引入的G1垃圾回收器也利用了多核硬件。
尝试获取 Java 并发实践手册的副本。
如果我可以在Java中使用多个内核,我将使用什么类/技术?
java.util.concurrent
实用程序类在并发编程中通常很有用。此包包括一些小型的标准化可扩展框架,以及一些提供有用功能但其他方面繁琐或难以实现的类。以下是主要组件的简要说明。
遗嘱 执行 人
Executor
是一个简单的标准化接口,用于定义自定义类似线程的子系统,包括线程池、异步 IO 和轻量级任务框架。
队列
java.util.concurrent 类提供了一个高效的可扩展线程安全非阻塞 FIFO 队列。ConcurrentLinkedQueue
定时
该类提供多个粒度(包括纳秒),用于指定和控制基于超时的操作。包中的大多数类除了无限期等待外,还包含基于超时的操作。TimeUnit
同步器
四个类帮助常见的特殊用途同步习语。 是一个经典的并发工具。 是一个非常简单但非常常见的实用程序,用于阻塞,直到给定数量的信号,事件或条件成立。[...]Semaphore
CountDownLatch
并发集合
除了队列之外,此包还提供了一些专为在多线程上下文中使用的集合实现:、 、 和 。ConcurrentHashMap
CopyOnWriteArrayList
CopyOnWriteArraySet
如果您想将线程数与可用 CPU 数相匹配,这也很方便,例如:
int n = Runtime.getRuntime().availableProcessors();
在大多数 Java 实现中,您可以依赖 Java 线程作为真正的操作系统线程。因此,如果使用 Thread 类,操作系统将负责确保工作负荷分布在多个内核上。
操作系统线程比商用多核系统早了很长时间,所以这实际上并不是一个问题。多核系统的唯一区别是允许时间多路复用的操作系统线程作为真正的并发线程在多个内核上执行。