Продажа картриджей Москва
21.07.2016
Иногда в приложении возникает необходимость завершить выполнение одного из потоков до того, как он закончит работу над своей задачей. Например, если поток тратит слишком много времени на загрузку видеофрагмента, и пользователь нажимает на кнопку отмены, UI-поток перехватывает это нажатие и видит, что в данном случае желательно завершить поток, выполняющий загрузку. К сожалению, прямого способа завершения потоков нс существует. Зато поток можно прервать (intenvpt), то есть послать потоку запрос, требующий его завершения, но при этом сам поток определяет, должен он выполнить это требование или нет. Прерывания вызываются через ссылку на целевой поток:
Thread t new SimpleThread();
t.start(); // Начало выполнения потока
t.interrupt(); // Требование прерывания выполнения потока. Возможно вас заинтересует продажа картриджей москва.
Механизм прерываний потоков реализован на основе партнёрства: поток делает себя доступным для прерывания, а другие потоки посылают запросы на прерывание. Требование прерывания не оказывает прямого воздействия на выполнение потока - в потоке, получившем это требование, просто устанавливается внутренний флаг с соответствующим значением (помечен как прерванный). Прерванный поток должен сам проверить значение этого флага, чтобы определить состояние прерывания и обеспечить безопасное завершение выполнения. В потоке обязательно должны быть предусмотрены и реализованы точки отмены (cancellation), чтобы позволить другим потокам прерывать его и переводить в состояние завершения:
public class SimpleThread extends Thread 1 @0verride
public void run() {
while( islnterrupted() == false ) {
// Поток продолжает выполнение
// Задача завершается, и поток тоже завершает выполнение
|