powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как остановить Thread?
20 сообщений из 20, страница 1 из 1
Как остановить Thread?
    #39083059
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нашёл такой вопрос/ответ:
http://www.javacodegeeks.com/2014/11/multithreading-concurrency-interview-questions-answers.html How do we stop a thread in Java?
To stop a thread one can use a volatile reference pointing to the current thread that can be set to null by other threads to indicate the current thread should stop its execution:

и ответ:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
private static class MyStopThread extends Thread {
	private volatile Thread stopIndicator;

	public void start() {
		stopIndicator = new Thread(this);
		stopIndicator.start();
	}

	public void stopThread() {
		stopIndicator = null;
	}

	@Override
	public void run() {
		Thread thisThread = Thread.currentThread();
		while(thisThread == stopIndicator) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
			}
		}
	}
}




Не понимаю как ссылка, установленная в null может остановить поток
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083077
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerНе понимаю как ссылка, установленная в null может остановить поток
ссылка null/not null просто используется как флаг
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083108
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerНе понимаю как ссылка, установленная в null может остановить поток
А мне не понятно, чем плох interrupt(), что аж пришлось городить неведомую фигню?
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083114
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanА мне не понятно, чем плох interrupt(), что аж пришлось городить неведомую фигню?
Ну, например, тем что он работает только на заблокированных потоках.
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083120
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerНе понимаю как ссылка, установленная в null может остановить поток
Никак. Дебильное описание. Обычный volatile флаг, и не важно ссылка ли там на поток или что ещё.
Останавливать поток не безопасно, поэтому соответствующие методы depreacted.
Безопасно - попросить поток остановиться и тогда поток остановится когда ему это будет удобно безопасно высвобождая все ресурсы.
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083122
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczwadmanА мне не понятно, чем плох interrupt(), что аж пришлось городить неведомую фигню?
Ну, например, тем что он работает только на заблокированных потоках.
Наверное, для меня стоит развернуть эту мысль. А то применяю везде (в т.ч. и на андроиде) и проблем не испытывал.
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083132
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanНаверное, для меня стоит развернуть эту мысль. А то применяю везде (в т.ч. и на андроиде) и проблем не испытывал. Если нет проверять isInterrupted либо других флагов, если нет IO и блокировок синхронизации, то выкидывать InterruptedException некому. Поток может колбасить задачу до умопомрачения.

Возможно имелось ввиду использование isInterrupted() вместо дополнительного флага и я не так понял?
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083139
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЕсли нет проверять isInterrupted
Дак это само собой. :) У ТС по сути создан дубликат стандартных методов. Не понятной, на кой.
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083283
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanBlazkowiczЕсли нет проверять isInterrupted
Дак это само собой. :) У ТС по сути создан дубликат стандартных методов. Не понятной, на кой.

Есть такие изобретатели. Главное, чтобы их код не пролез в продакшн. А статейки пусть пишут :D
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083661
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А напишите пожалуйста, развернуто, как надо останавливать поток с примером кода, чтобы не было недопониманий у меня и всех остальных читающих топик.
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083768
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИзопропилquestionerНе понимаю как ссылка, установленная в null может остановить поток
ссылка null/not null просто используется как флаг

какой толк слипать тред если ссылка null ?
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083793
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerкакой толк слипать тред если ссылка null ?
Видишь, код ещё и запутанным вышел. sleep() это просто имитация полезной деятельности. Никакой смысла он в этом примере не несет.
Приведенный код вообще изобилует тупаком. Так, например, у нас оказывается 2 экземпляра Thread, когда по-факту нужен только один. Второй тупо используется как Runnable. То есть у нас где-то есть ссылка на MyStopThread, которая обладает всеми методами Thread, но, их использовать нет смысла, так как этот поток не запущен. Вместо него запущен другой (OMFG!). Да, это будет покруче #define true false;
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083805
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerА напишите пожалуйста, развернуто, как надо останавливать поток с примером кода, чтобы не было недопониманий у меня и всех остальных читающих топик.

А чего тут развернуто? Тупо выкидываем всё лишнее:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
class MyStopThread extends Thread {
	@Override
	public void run() {
		while(!isInterrupted()) {
                        doNextPortionOfWork();
		}
	}
}



Имеем код, который проще, и ничем не уступает приведенному. Стоит так же учесть что использовать класс Thread подобным образом раньше просто не рекомендовали, а с появлением j.u.c. так и вообще смысла нет.
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083808
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczquestionerкакой толк слипать тред если ссылка null ?
Видишь, код ещё и запутанным вышел. sleep() это просто имитация полезной деятельности. Никакой смысла он в этом примере не несет.
Приведенный код вообще изобилует тупаком. Так, например, у нас оказывается 2 экземпляра Thread, когда по-факту нужен только один. Второй тупо используется как Runnable. То есть у нас где-то есть ссылка на MyStopThread, которая обладает всеми методами Thread, но, их использовать нет смысла, так как этот поток не запущен. Вместо него запущен другой (OMFG!). Да, это будет покруче #define true false;

Что код говно я понял.
Как надо не понял)
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083964
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczquestionerА напишите пожалуйста, развернуто, как надо останавливать поток с примером кода, чтобы не было недопониманий у меня и всех остальных читающих топик.

А чего тут развернуто? Тупо выкидываем всё лишнее:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
class MyStopThread extends Thread {
	@Override
	public void run() {
		while(!isInterrupted()) {
                        doNextPortionOfWork();
		}
	}
}



Имеем код, который проще, и ничем не уступает приведенному. Стоит так же учесть что использовать класс Thread подобным образом раньше просто не рекомендовали, а с появлением j.u.c. так и вообще смысла нет.

Это код внутри потока.

Если хотим закончить исполнение потока, то просто пишем
Код: java
1.
threadReference.interrupt()

?
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083970
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное вопрос звучал - как остановить thread если разраб изначально никаких флажков туда не заложил.
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083980
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всего три варианта:
1. Вытрясти (новый код из разработчика);
2. Переписать (самому);
3. Выбросить (с орг.выводами).
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39083999
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Я ведь правильно понимаю, что если я вызову thread.interrupt(), а поток в данный момент sleep или wait, то вылетит InterruptedException?
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39084111
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner Blazkowicz,

Я ведь правильно понимаю, что если я вызову thread.interrupt(), а поток в данный момент sleep или wait, то вылетит InterruptedException?
Да, и на многих IO блокировках тоже, если я ничего не путаю.
http://docs.oracle.com/javase/7/docs/api/java/io/InterruptedIOException.html
...
Рейтинг: 0 / 0
Как остановить Thread?
    #39084174
breath
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  @Override
  public void run() {
    while (!Thread.interrupted()) {
      //if(cancel) Thread.currentThread().interrupt();
      try {
        doTask();
        Thread.sleep(sleep);
      } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
      }
    }
  }


если поток Future можно future.cancel(true);
или жестко Thread.currentThread().interrupt();
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как остановить Thread?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]