2015-07-29 2 views
2

В Java, возможно ли, чтобы один поток вызывал ожидание другого потока, вызывая wait() или без какой-либо сигнализации? Я на самом деле не пытаюсь достичь или реализовать какой-то практический конец, например, в сообщении How to synchronize shared data between threads by using pause then resume or alternatives. Это скорее теоретическое исследование того, возможно ли такое в потоке Java.Может ли одна нить напрямую заставлять другую очередь ждать?

+0

Я думаю, да .... потому что main это нить, и это может заставить другие потоки ждать ... – CoderNeji

+3

Нет, нельзя приостановить другую тему, если вы не хотите использовать устаревшие и небезопасные методы, такие как suspend. –

+0

Возможный дубликат [Как немедленно приостановить другую тему] (http://stackoverflow.com/questions/9952636/how-to-immediately-pause-another-thread) –

ответ

2

Нет, вы не можете безопасно и надежно приостановить поток, используя обычную Java. Нити могут останавливаться, но не друг другу.

Темы имеют suspend и resume методы, но, как оказалось, они небезопасны и могут легко заставить всю вашу программу замерзать (тупик). Вы действительно не хотите их использовать.

+0

Не так ли, только когда потоки используют какую-то блокировку ресурсов? Предполагая, что мой поток не использует блокировку, могу ли я использовать приостановку и возобновить безопасно? – KDM

+0

@KDM Многие вещи используют блокировку без вашего ведома. Например, 'System.out.println'. – immibis

1

Нет. Из одного потока невозможно сделать другой поток для ожидания/паузы, вызвав метод wait().

Механизм блокировки (синхронизация) - самый безопасный способ заставить другие потоки дождаться выполнения потока, который завершил блокировку.

Смежные вопросы