- •21. Потоки ввода-вывода и работа с файлами в Java.
- •22. Байтовые и символьные потоки ввода-вывода
- •23. Понятия сериализации и десериализации объектов
- •24. Потоки выполнения. Многопоточное программирование
- •25, 26. Способы создания и запуска потоков выполнения.
- •27. Жизненный цикл потока
- •28. Управление потоками и планирование потоков
- •29. Синхронизация и синхронизированные методы. Синхронизация блоков операторов
- •30. Управление приоритетами и группы потоков
- •4. Доступ к ресурсам и их разделение.
27. Жизненный цикл потока
При выполнении программы объект класса Thread может быть в одном из 4 основных состояний: новый, работоспособный, неработоспособный, пассивный.
Поток может находится в одном из состояний, соответствующим элементам статики вложенного перечисления Thread State
NEW – поток создан, но еще не запущен.
RUNNABLE – поток выполняется.
BLOCKED – поток блокирован.
WAITING – поток ждет окончания работы другого потока.
TIMED_WAITING – поток некоторое время ждет окончания другого потока.
TERMINATED – поток завершен.
28. Управление потоками и планирование потоков
После того как поток создан, над ним можно выполнять различные управляющие операции: запуск, остановку, временную остановку и т. д. Для этого необходимо использовать методы, определенные в классе Thread.
Запуск потока
Для запуска потока на выполнение вы должны вызвать метод start:
public void start();
Как только приложение вызывает этот метод для объекта класса Thread или для объекта класса, реализующего интерфейс Runnable, управление получает метод run, определенный в соответствующем классе. В первом случае метод run должен быть определен в классе (ссылка на него указана конструктору класса Thread), создающем поток, а во втором - в классе, реализующем интерфейс Runnable.
Остановка потока
Если приложение желает остановить поток нормальным неаварийным образом, то оно вызывает для соответствующего объекта метод stop:
public final void stop();
Остановленный поток не исчезает и может быть вновь запущен методом start.
И наконец, можно принудительно остановить и уничтожить поток методом destroy:
public void destroy();
Временная остановка и возобновление работы потока
С помощью одного из двух вариантов метода sleep вы можете задержать выполнение потока на заданное время:
public final void join(long ms);
public final void join(long ms, int ns);
В первом варианте время задержки задается в миллисекундах, а во втором - в миллисекундах и наносекундах. Учтите, однако, что системный таймер компьютера вырабатывает прерывания примерно 18,2 раза в секунду, что значительно снижает точность выполнения задержки.
Остановка текущего потока для того, чтобы управление было передано другому потоку
public static void yield();
Приостановить выполнение потока можно с помощью метода sleep (время задержки) класса Thread..
29. Синхронизация и синхронизированные методы. Синхронизация блоков операторов
Очень часто возникает ситуация, когда несколько потоков, обращающихся к некоторому общему ресурсу, начинают мешать друг другу, более того они могут повредить этот общий ресурс. Например, когда 2 потока записывают информацию в файл, объект, поток.
Для предотвращения такой ситуации может использоваться ключевое слово synchronized.
Например
Public synchronized void whitiny (string str, int i){
//тело метода }
Синхронизация блоков операторов
Синхронизировать объект модно не только при помощи методов и модификаторов, но и при помощи синхронизации блока кода. В этом случае происходит блокировка объекта, указанного в инструкции synchronized и он становится недоступным для других синхронизированных методов и блоков.