Есть ли в Java поддержка многоядерных
Процессоры / параллельная обработка?
Да. Он также был платформой для других языков программирования, где реализация добавила «истинную многопоточность» или «реальную многопоточность». G1 Garbage Collector , представленный в более новых версиях, также использует многоядерное оборудование.
Java-параллелизм на практике
Попробуйте получить копию Java-параллелизма на практике книги.
Если я смогу использовать несколько ядер в
Ява, какой класс / техника я бы
использовать?
java.util.concurrent
Утилиты обычно полезны в
параллельное программирование . Этот пакет
включает в себя несколько небольших стандартизированных
расширяемые рамки, а также некоторые
классы, которые предоставляют полезные
функциональность и другие
утомительно или сложно реализовать.
Вот краткие описания
Основные компоненты.
Исполнители
Executor
- это простой стандартизированный интерфейс для определения пользовательских нитевидных подсистем, в том числе пулов потоков, асинхронного ввода-вывода и облегченных сред задач.
Очередь
Класс java.util.concurrent ConcurrentLinkedQueue
предоставляет эффективную масштабируемую неблокируемую неблокирующую очередь FIFO.
Сроки
Класс TimeUnit
предоставляет множество гранулярностей (включая наносекунды) для задания и управления операциями на основе времени ожидания. Большинство классов в пакете содержат операции, основанные на тайм-аутах в дополнение к неопределенному ожиданию.
Синхронизаторы
Четыре класса помогают распространенным идиомам синхронизации специального назначения. Semaphore
- классический инструмент параллелизма. CountDownLatch
- очень простая, но очень распространенная утилита для блокировки до тех пор, пока не будет выполнено заданное количество сигналов, событий или условий. [...]
Параллельные коллекции
Помимо очередей, этот пакет предоставляет несколько реализаций Collection, разработанных для использования в многопоточных контекстах: ConcurrentHashMap
, CopyOnWriteArrayList
и CopyOnWriteArraySet
.
Это также удобно, если вы хотите сопоставить количество потоков с количеством доступных процессоров, например:
int n = Runtime.getRuntime().availableProcessors();