В чем ключевые различия между процессом (Process) и потоком (Thread) в Java?

«В чем ключевые различия между процессом (Process) и потоком (Thread) в Java?» — вопрос из категории Java Core, который задают на 26% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Процесс и поток — это единицы выполнения, но с разной степенью изоляции и разделения ресурсов.

Критерий Процесс (Process) Поток (Thread)
Изоляция Полная. Имеет собное адресное пространство в памяти. Ограниченная. Потоки разделяют память процесса (кучу), в котором созданы.
Ресурсы Собственные системные ресурсы (память, файловые дескрипторы). Разделяют ресурсы родительского процесса.
Создание Тяжеловесная операция, требует выделения ресурсов ОС. Легковесная операция, создается внутри процесса.
Коммуникация Сложная: IPC (межпроцессное взаимодействие) через сокеты, pipes, разделяемую память. Простая: через общие объекты в куче (требует синхронизации!).
Сбой Сбой одного процесса не влияет на другие. Сбой (например, необработанное исключение) в потоке может завершить весь процесс.
В Java Класс java.lang.Process (запуск через Runtime.exec() или ProcessBuilder). Класс java.lang.Thread или пулы потоков из java.util.concurrent.

Пример создания потока:

// Создание и запуск потока
Thread thread = new Thread(() -> {
    System.out.println("Выполняюсь в потоке: " + Thread.currentThread().getName());
});
thread.start();

Пример запуска процесса:

// Запуск внешней программы как отдельного процесса
Process process = new ProcessBuilder("notepad.exe").start();

Вывод: Потоки используются для параллельных задач внутри одного приложения, процессы — для полной изоляции и запуска независимых программ.