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

OSCHINA-MIRROR/yfengJ-concurrency

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

конкуренция

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

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

Введение

Примечания к книге "Java Concurrency in Practice" - запись всех примеров из книги и добавление анализа из книги и личного понимания. Пример 1: ```java ExecutorService executor = Executors.newFixedThreadPool(10); ``` Анализ: В этом примере создается пул потоков с фиксированным числом потоков (10). Это позволяет ограничить количество одновременно... Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Язык

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
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