Потоки внешне это объекты, работающие параллельно с процессором - каждый имеет фиксированную долю процессорного времени и случайным образом запускаемые. При работе потоков, методы третьих объектов могут обрываться, если время потока заканчивается.
Главные методы класса Thread:
- yield - отказ от процессорного времени - другие процессы могут работать.
- sleep - спящий поток (в миллисекундах), при этом другие процессы ждут, может быть насильно прерван, поэтому ставится в try-конструкцию
- interrupt - разбудить поток
- join - установление зависимости между потоками.. зависящий поток должен ждать окончания главного
Конкурирующие потоки, работающие с одним ресурсом могут столкнуться с техническими проблемами "разрыва времени" — компьютеры имеют разные реализации управления памятью между (многоядерными)процессором, RAM, регистрами и кэшем (собственно отсюда различие Itanium, Sun, Pentium архитектур..). Для этого есть ключевое слово у метода synchronized, который говорит о том что метод выполняется как атомарная операция.
- getPriority, setPriority методы позволяют установить и прочитать важность потока относительно остальных
- setDaemon, isDaemon - методы создающие демонов как потоки, при закрытии которых программа остановит обычные потоки
Особенность synchronized ещё и в том, что фигурными скобками можно отметить блок который должен быть атомарным (а не только отдельный метод). По умолчанию обычный статичный метод main, так же считается потоком.