Пример 3:
CountDownLatch doneSignal = new CountDownLatch(numTasks);
for (int i = 0; i < numTasks; ++i) {
final int taskId = i;
executor.execute(new Runnable() {
public void run() {
try {
doTask(taskId);
} finally {
doneSignal.countDown();
}
}
});
}
Анализ: В этом примере используется CountDownLatch
для синхронизации выполнения задач. Каждый поток уменьшает счетчик doneSignal
после завершения своей задачи. Это позволяет основному потоку ждать, пока все задачи не завершатся.
Пример 4:
AtomicInteger taskCount = new AtomicInteger(numTasks);
for (int i = 0; i < numTasks; ++i) {
executor.execute(new Runnable() {
public void run() {
try {
doTask();
} finally {
if (taskCount.decrementAndGet() == 0) {
doneSignal.countDown();
}
}
}
});
}
Анализ: В этом примере используется AtomicInteger
для отслеживания количества оставшихся задач. Когда все задачи завершены, doneSignal
уменьшается, позволяя основному потоку продолжить выполнение после завершения всех задач.```java
Semaphore semaphore = new Semaphore(maxConcurrentTasks);
for (int i = 0; i < numTasks; ++i) {
executor.execute(new Runnable() {
public void run() {
try {
semaphore.acquire();
try {
doTask();
} finally {
semaphore.release();
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
});
}
```markdown
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
}
Анализ: В этом примере используется Semaphore
для ограничения количества одновременно выполняемых задач. Каждый поток запрашивает разрешение перед выполнением задачи и освобождает разрешение после её завершения.
```#### Описание
Примеры исходного кода из книги по Java конкуренции программированию (в пакете com.zyf.concurrency.example), а также переписанные мной примеры из книги (пакеты, окончание которых соответствует названию главы).
#### Выводы по прочтению
15 июля 2020 года
Книга прочитана, и я узнал много полезного, включая, как писать конкурирующую безопасный код, использование Java пакета конкуренции и распространенные проблемы конкуренции, такие как проблема ABA. Большое спасибо автору за написание этой книги, я получил много пользы.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )