Spec-Zone .ru
спецификации, руководства, описания, API
 Платформа Java™
Стандарт Эд. 7

Пакет java.util.concurrent

Служебные классы, обычно полезные в параллельном программировании.

См.: Описание

Пакет java.util.concurrent Описание

Служебные классы, обычно полезные в параллельном программировании. Этот пакет включает несколько маленьких стандартизированных расширяемых платформ, так же как некоторые классы, которые обеспечивают полезную функциональность и являются иначе утомительными или трудными реализовать. Вот краткие описания основных компонентов. См. также java.util.concurrent.locks и java.util.concurrent.atomic пакеты.

Исполнители

Интерфейсы. Executor простой стандартизированный интерфейс для того, чтобы определить пользовательские нитевидные подсистемы, включая пулы потоков, асинхронный IO, и легкие платформы задачи. В зависимости от которого используется конкретный класс Исполнителя, задачи могут выполниться в недавно создаваемом потоке, существующем потоке выполнения задачи, или вызове потока execute, и может выполниться последовательно или одновременно. ExecutorService служит более полной асинхронной основой выполнения задачи. ExecutorService управляет организацией очередей и планированием задач, и позволяет управляемое завершение работы. ScheduledExecutorService подвзаимодействуйте через интерфейс и связанные интерфейсы добавляют поддержку задержанного и периодического выполнения задачи. ExecutorServices обеспечивают методы, располагая асинхронное выполнение любой функции, выраженной как Callable, переносящий результат аналог Runnable. A Future возвращает результаты функции, позволяет определение того, завершилось ли выполнение, и обеспечивает средство отменить выполнение. A RunnableFuture a Future это обладает a run метод, что после выполнения, устанавливает свои результаты.

Реализации. Классы ThreadPoolExecutor и ScheduledThreadPoolExecutor обеспечьте настраиваемые, гибкие пулы потоков. Executors класс обеспечивает методы фабрики для наиболее распространенных видов и конфигураций Исполнителей, так же как несколько служебных методов для того, чтобы использовать их. Другие утилиты, основанные на Executors включайте реальный класс FutureTask обеспечение общей расширяемой реализации Фьючерса, и ExecutorCompletionService, это помогает в координировании обработки групп асинхронных задач.

Класс ForkJoinPool предоставляет Исполнителю, прежде всего разработанному для того, чтобы обработать экземпляры ForkJoinTask и его подклассы. Эти классы используют крадущего работу планировщика, который достигает высокой пропускной способности для задач, соответствующих ограничениям, которые часто содержат в интенсивной вычислением параллельной обработке.

Очереди

ConcurrentLinkedQueue класс предоставляет эффективную масштабируемую ориентированную на многопотоковое исполнение очередь FIFO неблокирования.

Пять реализаций в java.util.concurrent поддерживайте расширенный BlockingQueue интерфейс, который определяет версии блокирования помещенных и берет: LinkedBlockingQueue, ArrayBlockingQueue, SynchronousQueue, PriorityBlockingQueue, и DelayQueue. Различные классы покрывают наиболее распространенные контексты использования для производителя-потребителя, обмена сообщениями, параллельного управления задачами, и связали параллельные проекты.

Расширенный интерфейс TransferQueue, и реализация LinkedTransferQueue представьте синхронное transfer метод (наряду со связанными функциями), в котором производитель может дополнительно блокировать ожидание его потребителя.

BlockingDeque интерфейс расширяется BlockingQueue поддерживать и FIFO и LIFO (стековые) операции. Класс LinkedBlockingDeque обеспечивает реализацию.

Синхронизация

TimeUnit класс обеспечивает многократные гранулярности (включая наносекунды) для определения и управления тайм-аутом базируемые операции. Большинство классов в пакете содержит операции, основанные на тайм-аутах в дополнение к неопределенному, ожидает. Во всех случаях, что тайм-ауты используются, тайм-аут определяет минимальное время, когда метод должен ожидать прежде, чем указать что это синхронизированный. Реализации делают "максимальные усилия", чтобы обнаружить тайм-ауты как можно скорее после того, как они происходят. Однако, неопределенное количество времени может протечь между обнаруживаемым тайм-аутом и потоком, фактически выполняющимся снова после того тайм-аута. Все методы, которые принимают обработку параметров тайм-аута, оценивают меньше чем или равный, чтобы обнулить, чтобы означать не ожидать вообще. Чтобы ожидать "навсегда", можно использовать значение Long.MAX_VALUE.

Синхронизаторы

Пять классов помогают общим идиомам синхронизации специального назначения.

Параллельные Наборы

Помимо Очередей, этот пакет предоставляет реализации Набора, разработанные для использования в многопоточных контекстах: ConcurrentHashMap, ConcurrentSkipListMap, ConcurrentSkipListSet, CopyOnWriteArrayList, и CopyOnWriteArraySet. Когда много потоков, как ожидают, получат доступ к данному набору, a ConcurrentHashMap обычно предпочтительно для синхронизируемого HashMap, и a ConcurrentSkipListMap обычно предпочтительно для синхронизируемого TreeMap. A CopyOnWriteArrayList предпочтительно для синхронизируемого ArrayList когда ожидаемое число чтений и обходов значительно превосходит численностью число обновлений к списку.

"Параллельный" префикс, используемый с некоторыми классами в этом пакете, является сокращением, указывающим на несколько различий от подобных "синхронизируемых" классов. Например java.util.Hashtable и Collections.synchronizedMap(new HashMap()) синхронизируются. Но ConcurrentHashMap "параллельно". Параллельный набор ориентирован на многопотоковое исполнение, но не управляемый единственной блокировкой исключения. В особом случае ConcurrentHashMap это безопасно разрешает любое число параллельных чтений так же как настраиваемое число параллельных записей. "Синхронизируемые" классы могут быть полезными, когда Вы должны предотвратить весь доступ к набору через единственную блокировку, за счет более плохой масштабируемости. В других случаях, в которых многократные потоки, как ожидают, получат доступ к общему набору, "параллельные" версии обычно предпочтительны. И несинхронизируемые наборы предпочтительны, когда или наборы неразделены, или доступны только, содержа другие блокировки.

Большинство параллельных реализаций Набора (включая большинство Очередей) также отличается от обычных java.util соглашений в том их Iterators, обеспечивают слабо непротиворечивый, а не обход быстрого сбоя. Слабо непротиворечивый iterator ориентирован на многопотоковое исполнение, но не обязательно замораживает набор, выполняя итерации, таким образом, это может (или не может) отражать любые обновления, так как iterator создавался.

Свойства Непротиворечивости памяти

Глава 17 Спецификации языка Java™ определяет происхождение - перед отношением на операциях памяти, таких как чтения и записи совместно используемых переменных. Результаты записи одним потоком, как гарантируют, будут видимы к чтению другим потоком, только если операция записи происходит - перед операцией чтения. synchronized и volatile конструкции, так же как Thread.start() и Thread.join() методы, может сформироваться, происходит - перед отношениями. В особенности: Методы всех классов в java.util.concurrent и его подпакеты расширяют эти гарантии до высокоуровневой синхронизации. В особенности:
С тех пор:
1.5
 Платформа Java™
Стандарт Эд. 7

Представьте ошибку или функцию
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.