JavaRush
Акция
Университет
Java FullStack
Python FullStack
new
Web FullStack
new
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема

Лекции

  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Мое обучение
  • Курсы
  • Университет
  • Карта квестов
  • Лекции
  • Deadlock: причины, примеры, устранение

    JAVA 25 SELF
    53 уровень,0 лекция
    В лекции разбираем, что такое взаимная блокировка потоков (deadlock) в Java, почему она происходит и какие четыре условия для этого нужны. На практическом примере с synchronized показываем воспроизведение проблемы, затем изучаем стратегии профилактики: единый порядок захвата ресурсов, использование ReentrantLock.tryLock с таймаутом, сокращение критических секций и отказ от лишних вложенных блокировок. Покажем диагностику через Thread Dump и jstack, как распознать состояния BLOCKED/ WAITING, и завершим чек-листом и типичными ошибками.
    Открыта
  • Livelock и Starvation: определение, примеры

    JAVA 25 SELF
    53 уровень,1 лекция
    Разбираем конкурентные аномалии Livelock и Starvation: чем они отличаются от Deadlock, как выглядят в коде и в логах. Показаны примеры на Java: «вежливые работники» (ожившая блокировка) и голодание по приоритетам и из‑за несправедливых блокировок. Учимся обнаруживать проблему (логирование, Thread dump, VisualVM, Java Mission Control) и предотвращать её: случайные задержки перед повторной попыткой ( Thread.sleep), неблокирующие алгоритмы, справедливые блокировки через ReentrantLock с флагом fairness ( new ReentrantLock(true)), аккуратные критические секции и отказ от злоупотребления setPriority() и synchronized.
    Открыта
  • Thread-safe коллекции: ConcurrentHashMap и другие

    JAVA 25 SELF
    53 уровень,2 лекция
    В этой лекции разберём, почему обычные коллекции ( ArrayList, HashMap) опасны в многопоточной среде, и какие потокобезопасные альтернативы предлагает пакет java.util.concurrent: ConcurrentHashMap, CopyOnWriteArrayList, ConcurrentLinkedQueue, структуры на skip-list и BlockingQueue. Обсудим атомарные операции вроде merge, putIfAbsent, computeIfAbsent, сравним с Collections.synchronizedMap, рассмотрим практические примеры и типичные ошибки (слабоконсистентные итераторы, неатомарные последовательности операций и др.).
    Открыта
  • AtomicInteger, AtomicReference: атомарные операции

    JAVA 25 SELF
    53 уровень,3 лекция
    Почему инкремент i ++ не работает в многопоточности, что такое атомарные операции и как их даёт пакет java.util.concurrent.atomic. Разбираем AtomicInteger и AtomicReference, методы incrementAndGet(), compareAndSet(...), внутренний механизм CAS (Compare-And-Swap), а также когда лучше выбрать synchronized и когда — LongAdder. В конце — типичные ошибки: сложные операции, ABA и потокобезопасность вложенных объектов.
    Открыта
  • Диагностика и отладка многопоточных программ

    JAVA 25 SELF
    53 уровень,4 лекция
    Как снимать и читать Thread Dump с помощью jstack, VisualVM и IDE, распознавать состояния потоков ( RUNNABLE, BLOCKED, WAITING) и находить взаимные блокировки. Разберём мониторинг потоков в Java Mission Control и Java Flight Recorder, практики логирования (имена потоков, вход/выход из synchronized), минимизацию блокировок, тестирование конкурентности с CountDownLatch и разбор реального deadlock-кейса. В финале — типичные ошибки и как их избежать.
    Открыта
  • Введение в параллелизм

    JAVA 25 SELF
    54 уровень,0 лекция
    В этой лекции разбираем разницу между многопоточностью и параллелизмом: где важна отзывчивость, а где — реальное ускорение на нескольких ядрах. Обсудим создание потоков через Thread, реализацию Runnable и высокоуровневые пулы ExecutorService, посмотрим на простой пример суммирования массива, разберём, когда параллелизм помогает, а когда мешает, а также типичные проблемы: гонки данных, синхронизация через synchronized, взаимные блокировки и балансировку нагрузки. В конце — сравнительная таблица и визуализация сценариев.
    Открыта
  • ExecutorService, Callable, Future: запуск задач

    JAVA 25 SELF
    54 уровень,1 лекция
    Практика многопоточности по-взрослому: передаём задачи в ExecutorService вместо ручного создания Thread, управляем пулом, очередью и жизненным циклом ( shutdown(), shutdownNow()). Разбираем разницу между Runnable и Callable<T>, получаем результаты через Future и его методы ( get(), isDone(), cancel(...), isCancelled()). Покажем запуск нескольких задач, invokeAll/ invokeAny, обработку ExecutionException и типичные ошибки.
    Открыта
  • Параллельные стримы: синтаксис, применение

    JAVA 25 SELF
    54 уровень,2 лекция
    Разбираемся, как переключить обычный поток данных на параллельную обработку одной строкой — через parallelStream() или .parallel(), что происходит под капотом в ForkJoinPool.commonPool(), когда параллельность действительно ускоряет вычисления (большие коллекции, «тяжёлые» операции) и где она может замедлить. Покажем примеры фильтрации, агрегации, сортировки, измерения производительности и разберём типичные ошибки: побочные эффекты в forEach, сохранение порядка, выбор коллекций и настройку степени параллелизма.
    Открыта
  • ForkJoinPool и RecursiveTask: рекурсивные задачи

    JAVA 25 SELF
    54 уровень,3 лекция
    Практическое руководство по параллельным вычислениям в Java: как работает пул задач ForkJoinPool и рекурсивные задачи RecursiveTask<T>/ RecursiveAction, чем полезен алгоритм work-stealing, как дробить задачи через fork() и объединять результаты с join() внутри compute(). Разберём запуск через pool.invoke(), пример суммы массива и поиска максимума, место ForkJoinPool в parallelStream(), а также типичные ошибки и способы их избежать.
    Открыта
  • Лучшие практики параллельного программирования

    JAVA 25 SELF
    54 уровень,4 лекция
    Практическое руководство по параллельному программированию в Java: когда стоит использовать ExecutorService, где помогает parallelStream, и для каких задач нужен ForkJoinPool. Обсудим потокобезопасность с ConcurrentHashMap/ CopyOnWriteArrayList и атомарными классами ( AtomicInteger), замеры производительности через System.nanoTime() и JMH, обработку ошибок из Future.get() и ForkJoinTask, корректную реакцию на InterruptedException, а также приёмы логирования ( Thread.currentThread().getName()) и тестирования ( Awaitility). В конце — таблица выбора инструмента и типичные ошибки.
    Открыта
  • Введение в CompletableFuture

    JAVA 25 SELF
    55 уровень,0 лекция
    В этой лекции разберём, почему синхронный код приводит к блокировкам, какие ограничения были у Future (вроде блокирующего get()), и как класс CompletableFuture из пакета java.util.concurrent меняет стиль работы с асинхронностью. Потренируемся запускать задачи фоном через supplyAsync, подписываться на результат с помощью thenAccept/ thenApply, обсудим роль пула ForkJoinPool и типичные ошибки: использование get()/ join() в главном потоке, отсутствие обработки ошибок через exceptionally/ handle, и др.
    Открыта
  • Асинхронные задачи: thenApply, thenAccept, thenRun

    JAVA 25 SELF
    55 уровень,1 лекция
    Разбираем запуск и композицию асинхронных вычислений с помощью CompletableFuture: как стартовать задачи через supplyAsync и runAsync, чем отличаются обработчики thenApply, thenAccept, thenRun, и когда выбирать их асинхронные версии thenApplyAsync/ thenAcceptAsync/ thenRunAsync. Поговорим о потоках выполнения ( ForkJoinPool или ваш Executor), типах результатов ( CompletableFuture<T>, CompletableFuture<Void>) и типичных ошибках: блокирующие get()/ join(), необработанные ошибки без exceptionally/ handle/ whenComplete, а также попытка использовать результат внутри thenRun.
    Открыта
  • 1
  • ...
  • 23
  • 24
  • 25
  • 26
  • 27
  • ...
  • 57
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2025 JavaRush
MastercardVisa
"Программистами не рождаются" © 2025 JavaRush