Процесс(Process) - единица операционной системы. На которую выделена память и др. ресурсы. Содержит в себе потоки. Процесс в Java — это JVM. Запуская Java-программу, вы запускаете процесс: java MyProgram.
Поток(Thread) - единица исполнения кода.
Поток имеет stack и memory для исполнения. Потоки исполняются на ядрах процессора. Чаще всего одна программа состоит из одного процесса, но бывают и исключения (например, браузер Chrome создает отдельный процесс для каждой вкладки, что дает ему некоторые преимущества, вроде независимости вкладок друг от друга). Процессы изолированы друг от друга, поэтому прямой доступ к памяти чужого процесса невозможен (взаимодействие между процессами осуществляется с помощью специальных средств).
Приложение живо пока жив хоть один поток.
Главный поток(main thread) запускает метод main, и всё выполнение программы начинается с него.
Атомарный - значит "неделимый" - в том смысле, что операция должна быть выполнена полностью или отменена.
Критическая секция - участок исполняемого кода программы, в котором производится доступ к общему ресурсу (данным или устройству), который не должен быть одновременно использован более чем одним потоком выполнения. При нахождении в критической секции двух (или более) потоков возникает состояние «гонки» («состязания»). Во избежание данной ситуации необходимо выполнение четырех условий: