Easyprocess-vs-thread

Чем процесс отличается от потока в Java?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Process — независимая программа со своим address space, memory, file descriptors. Поток (thread) — единица выполнения внутри процесса, разделяет memory с другими потоками.

// Поток — внутри процесса JVM, все делят heap
new Thread(() -> sharedList.add(1)).start();

// Процесс — другой процесс ОС через ProcessBuilder
Process p = new ProcessBuilder("ls").start();
String out = new String(p.getInputStream().readAllBytes());
p.waitFor();
  • Межпоточное взаимодействие — через shared memory (поля, очереди);
  • IPC (межпроцессное) — через pipes, sockets, files, shared memory;
  • Thread дешевле process (context switch быстрее), но не бесплатно (~1MB stack на thread);
  • Process isolation — crash одного не влияет на другой (security/safety);
  • Virtual threads (Java 21) — лёгкие, миллионы, под капотом малое число OS threads.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.