Комментарии 15
Визуализация потрясающая! Спасибо!
+4
Вот тут еще есть https://sourceforge.net/projects/javaconcurrenta/
0
Сразу возник вопрос к примеру с парковкой, где используется семафор. Не будет ли тут race condition? Вы ведь пускаете 5 потоков сразу. Один поток проверит наличие свободного места, второй поток так же одновременно проверит наличие свободного места и обе машины встанут на одно и тоже место.
+1
0
Что касается проверки свободного места, то это уже в рамках критической секции нужно выполнять. Например, закрыли семафор, проверили место на диске, выполнили операцию, открыли семафор. Так второй поток будет заблокирован в момент, когда попытается закрыть семафор, если он уже закрыт, и будет разблокирован, когда семафор откроется. Таким образом проверка свободного места на диске будет выполняться в рамках одного потока.
0
Спасибо, исправился.
0
Каждый раз, когда я вижу потоки переведенные как "нити", у меня дергается глаз.
+1
Ужасные примеры с кучей ошибок.
Добавлю, что давать ссылки на документацию по Java 7 (устаревшую) — плохой тон. И, как уже было замечено, в русском языке thread принять переводить "поток", а не "нить".
- В примере Semaphore парковка не синхронизирована между заехавшими на неё автомобилями. В результате несколько автомобилей могут одновременно занять одно место.
- Неудачный пример CountDownLatch: команды "Внимание", "Марш" могут быть даны ещё до прибытия автомобилей на старт, при этом команда "Марш" сама не является сигналом к началу гонки.
- С Phaser вообще беда. В обоих циклах while очевидный race condition: фаза может измениться после проверки условия. Вообще, конструкция
phaser.awaitAdvance(phaser.getPhase())
не имеет смысла по причине своей неатомарности. Кроме того, в примере пассажир может пропустить автобус, даже если пришёл на остановку вовремя.
Добавлю, что давать ссылки на документацию по Java 7 (устаревшую) — плохой тон. И, как уже было замечено, в русском языке thread принять переводить "поток", а не "нить".
+8
запускаемый анимированный jar http://www.jconcurrent.com/
0
Спасибо! Хорошие примеры
0
Отличная статья! Спасибо! И примеры очень наглядные.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Справочник по синхронизаторам java.util.concurrent.*