TGViewer
Евгений Козлов пишет про IT Евгений Козлов пишет про IT @careerunderhood · 2.84K subscribers
Post #346 2.69K
CPU, Memory Models, Concurrency, Multiprocess, Multithreading и Async. Часть 18. Java.

В Java как и в большинстве языков есть возможность реализовать конкуррентные программы с помощью примитивов:

🔵 Процессы
Здесь все также как и других языках + вступают в силу все те правила о которых я рассказывал ранее когда разбирались с внутренностями ОС. Для того чтобы создавать процессы нужно использовать класс java.lang.ProcessBuilder. Так как Java является кроссплатформенной то и поведение многопроцессной программы зависит от ОС.

Пример многопроцессной программы на Java

🔵 Потоки ОС (1-1 mapping, вытесняющая многозадачность)
Основной
способ ивлекать максимум из железа. Каждый поток маппится на настоящий поток ОС. В Java отсутствует GIL, поэтому при запуске на многоядерной системе получаем параллелизм.

Пример многопоточной программы на Java

🔵 Виртуальные потоки (m-n mapping, кооперативная многозадачность)
Глоток свежих идей от Java Core команды. В Java не хватало легковесных файберов, которые позволили бы экономить ресурсы и ускорить работу IO bound программ. Виртуальные потоки управляются JVM, переключение между потоками происходит если поток блокируется (IO, Syscall).

Важное замечание - так как у виртуальных потоков многозадачность кооперативная, на производительность программы влияет то как написан код. Ниже ссылка на пример демонстрирующий ситуацию когда неудачно созданный поток (бесконечный цикл) блочит всю программу (программа искусственно ограничена одним ядром и одним потоком ОС для наглядности). Как говорится, чем больше сила тем больше и ответственность.

Пример многопоточной программы c virtual threads на Java

———

На этом обзор конкуррентных примитивов в Java закончен, спасибо что читали, делитесь в комментариях опытом разработки конкуррентных программ, мне будет очень интересно почитать, так как с Java в проде не работал😊
GitHub JavaThreadsExamples/src/MultiProcessExample.java at master · abstractart/JavaThreadsExamples Contribute to abstractart/JavaThreadsExamples development by creating an account on GitHub.
  • 👍 12
  • 🔥 5
More from @careerunderhood
  1. Oct 2, 2026Пока от темы Concurrency далеко не ушли. В последнем цикле я если и упоминал вопросы произ…
  2. Sep 30, 2026Результаты опроса меня впечатлили. Большинству интересны истории из работы. Поехали, начне…
  3. Sep 25, 2026Post #470
  4. Sep 21, 2026Concurrency, Synchronization and Consistency. Non-blocking. Оглавление Введение - Блокирую…
  5. Sep 21, 2026Concurrency and Consistency. Non-blocking, lock-free and async. Пост №12. Заключение. Когд…
  6. Sep 20, 2026Concurrency and Consistency. Non-blocking, lock-free and async. Пост №11. Самые важные фак…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →