1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yfengJ-concurrency

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 3.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 07.06.2025 06:36 379f282

конкуренция

Пример 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/yfengJ-concurrency.git
git@api.gitlife.ru:oschina-mirror/yfengJ-concurrency.git
oschina-mirror
yfengJ-concurrency
yfengJ-concurrency
master