
- •Введение
- •1 Концепции объектно-ориентированного программирования
- •1.1 Классы и объекты
- •1.2 Геттеры и сеттеры
- •1.3 Перегрузка методов
- •1.4 Ключевые слова this и super
- •1.5 Метод toString()
- •1.6 Конструкторы
- •1.7 Определение класса в Java
- •1.8 Принципы ООП
- •1.8.1 Абстракция
- •1.8.2 Инкапсуляция
- •1.8.3 Наследование
- •1.8.4 Полиморфизм
- •1.9 Переопределение методов
- •1.10 Подстановка
- •1.11 Апкастинг и даункастинг
- •1.13 Абстрактные классы и интерфейсы
- •1.13.1 Абстрактные классы
- •1.13.2 Интерфейсы
- •2 Типы отношений между классами и объектами
- •2.1 Ассоциация
- •2.2 Агрегация
- •2.3 Композиция
- •2.4 Наследование
- •3 Введение во фреймворк «Коллекции». Обобщения
- •3.1 Коллекции
- •3.2 Перебор элементов коллекций
- •3.3 Обобщения
- •3.3.2 Дженерик-методы и универсальные конструкторы
- •3.3.3 Подстановочные символы (wildcard)
- •4 Потоки ввода-вывода и потоки выполнения. Многопоточное программирование
- •4.1 Потоки
- •InputStream
- •OutputStream
- •Символьные потоки
- •Специализированные потоки
- •Файловые потоки
- •Стандартные потоки ввода-вывода
- •Чтение из стандартного ввода
- •Ввод с консоли
- •Форматированный вывод
- •Класс File
- •Методы класса File
- •4.2 Сериализация и десериализация объектов
- •4.2.1 Сериализация
- •4.2.2 Десериализация
- •4.2.3 Исключение данных из сериализации
- •4.2.4 Сериализация статических полей
- •4.2.5 Сериализация с массивом или коллекцией
- •4.2.6 Сериализация Java с наследованием
- •4.2.7 Сериализация Java с агрегированием
- •4.2.8 SerialVersionUID
- •4.3 Потоки выполнения
- •4.4. Жизненный цикл потока
- •4.5 Многопоточность
- •4.5.1 Главный поток
- •4.5.2 Создание и завершение потоков
- •4.5.3 Завершение потока
- •4.5.4 Управление приоритетами
- •4.5.5 Синхронизация потоков
- •4.5.6 Состояния потока
- •4.5.7 Блокировка
- •5 Лямбда-выражения
- •Заключение
- •Литература
- •Глоссарий

126
4.4. Жизненный цикл потока
При выполнении программы объект класса Thread может быть в одном из четырех основных состояний: «новый», «работоспособный», «неработоспособный» и «пассивный» (рис. 4.14).
Новый
Работоспособный |
Неработоспособный |
Пассивный
Рис. 4.14 – Состояния потока
Ниже показаны различные состояния потока в Java:
NEW – поток создан, но еще не запущен;
RUNNABLE – поток выполняется;
BLOCKED – поток блокирован;
WAITING – поток ждет окончания работы другого потока;
TIMED_WAITING – поток некоторое время ждет окончания другого потока;
TERMINATED или DEAD – поток завершен.
При создании потока он получает состояние «новый» (NEW) и не выполняется. Для перевода потока из состояния «новый» в состояние «работоспособный» (RUNNABLE) следует выполнить метод start(), который вызывает метод run() – основной метод потока.
Получить текущее значение состояния потока можно вызовом метода getState(). Поток переходит в состояние «неработоспособный» в режиме ожидания (WAITING) вызовом методов join(), wait(), suspend() или методов ввода-вывода, которые предполагают задержку. Для задержки потока на некоторое время (в миллисекундах) можно перевести его в режим ожидания по времени
(TIMED_WAITING) с помощью методов yield(), sleep(long millis), join(long timeout) и wait(long timeout), при выполнении которых может генерироваться прерывание InterruptedException. Вернуть потоку работо-