Применение исполнителя в языке Java

Применение исполнителя в языке JavaВ параллельном API поддерживается средство, называемое исполнителем и предназначенное для создания потоков исполнения и управления ими.

В этом отношении исполнитель служит альтернативой управлению потоками исполне­ния средствами класса Thread. Читать

Класс Phaser, примеры реализации кода в Java

Класс Phaser, примеры реализации кода в JavaВ версии JDК 7 внедрен новый класс синхронизации под названием Phaser. Главное его назначение — синхронизировать потоки исполнения, которые пред­ставляют одну или несколько стадий (или фаз) выполнения действия. Например, в прикладной программе может быть несколько потоков исполнения, реализующих три стадии обработки заказов.

На первой стадии отдельные потоки исполне­ния используются для того, чтобы проверить сведения о клиенте, наличие товара на складе и его цену. По завершении этой стадии остаются два потока исполнения, где на второй стадии вычисляется стоимость доставки и сумма соответствующего налога, а на заключительной стадии подтверждается оплата и определяется ори­ентировочное время доставки.

В прошлом для синхронизации нескольких пото­ков исполнения в такой прикладной программе пришлось бы немало потрудиться. А с появлением класса Phaser этот процесс значительно упростился. Читать

Приоритеты потоков исполнения в Java

Приоритеты потоков исполнения в JavaПланировщик потоков использует приоритеты потоков исполнения, чтобы принять решение, когда разрешить исполнение каждому потоку. Теоретически вы­сокоприоритетные потоки исполнения получают больше времени ЦП, чем низко­приоритетные.

А на практике количество времени ЦП, которое получает потоки сполнения, нередко зависит не только от его приоритета, но и от ряда других факторов. ( Например, особенности реализации многозадачности в операционной системе могут оказывать влияние на относительную доступность времени ЦП. ). Читать

Класс Exchanger, примеры реализации кода в Java

Класс Exchanger, примеры реализации кода в JavaВероятно, наиболее интересным с точки зрения синхронизации является класс Exchanger, предназначенный для упрощения процесса обмена данными между двумя потоками исполнения.

Принцип действия класса Exchanger очень прост: он ожидает до тех пор, пока два отдельных потока исполнения не вызовут его метод exchange(). Как только это произойдет, он произведет обмен данны­ми, предоставляемыми обоими потоками. Такой механизм обмена данными не только изящен, но и прост в применении. Читать

Класс CyclicBarrier, примеры реализации кода в Java

Класс CyclicBarrier, примеры реализации кода в JavaВ программировании нередко возникают такие ситуации, когда два или больше потока должны находиться в режиме ожидания в предопределенной точке исполне­ния до тех пор, пока все эти потоки не достигнут данной точки.

Для этой цели в параллельном API предоставляется класс CyclicBarrier. Он позволяет определить объект синхронизации, который приостанавливается до тех пор, пока определенное количество потоков исполнения не достигнет некоторой барьерной точки. Читать

Класс CountDownLatch, примеры реализации кода в Java

Класс CountDownLatch, примеры реализации кода в JavaИногда требуется, чтобы поток исполнения находился в режиме ожидания до тех пор, пока не наступит одно (или больше) событие.

Для этих целей в парал­лельном API предоставляется класс CountDownLatch, реализующий самоблокировку с обратным отсчетом. Объект этого класса изначально создается с количеством событий, которые должны произойти до того момента, как будет снята самоблокировка. Всякий раз, когда происходит событие, значение счетчика уменьшается.

Как только значение счетчика достигнет нуля, самоблокировка будет снята. Читать

Класс Semaphore, примеры реализации кода в Java

Класс Semaphore, примеры реализации кода в JavaПервым сразу же распознаваемым среди объектов синхронизации является семафор, реализуемый в классе Semaphore.

Семафор управляет доступом к обще­му ресурсу с помощью счетчика. Если счетчик больше нуля, доступ разрешается,а если он равен нулю, то в доступе будет отказано.

В действительности этот счетчик подсчитывает разрешения, открывающие доступ к общему ресурсу. Следовательно,чтобы получить доступ к ресурсу, поток исполнения должен получить у семафора разрешение на доступ. Читать