Походит , исполняемый JAR мог работать на Вас. Если Вы распределяете ZIP со всеми БАНКАМИ Ваши основные стандартные потребности, и Вы действительно выполняете его в командном процессоре, возможно, Вы могли создать исполняемый JAR с Основным Классом и Путем к классу, определенным в декларации. Все Ваши пользователи должны сделать, дважды щелкнуть по JAR и Вашему дяде Bob's.
Вы не можете перевести другой поток в спящий режим. (Вы можете использовать устаревший метод suspend ()
, но, пожалуйста, не делайте этого). Этот вызов:
this.sleep(200);
фактически переводит в спящий режим , выполняющий в настоящий момент поток, а не Thread
, на который ссылается «this». sleep
- статический метод - хорошие IDE выдадут предупреждение над этой строкой.
У вас должен быть просто флаг, говорящий «спать, пожалуйста», а затем заставить спящий поток проверять этот флаг перед выполнением какой-либо работы.
Это хорошо то, что нельзя перевести другой поток в спящий режим. Предположим, это синхронизированный метод - это будет означать, что вы удерживаете блокировку во время сна, заставляя всех остальных пытаться заблокировать ту же блокировку. Ничего хорошего. Используя систему на основе флагов,
Добавьте это в свой поток:
public AtomicBoolean waitLonger = new AtomicBoolean ();
public Object lock = new Object ();
В run ()
:
synchronized (lock) {
if (waitLonger.get ()) {
lock.wait ();
}
}
В другом потоке:
synchronized (lock) {
try {
sleeper.waitLonger.set(true);
...
lock.notify();
sleeper.waitLonger.set(false);
}
Таким образом, вы можете заставить спящего ждать пока не будут завершены другие работы.
На самом деле, чтобы указать потоку спать дольше , я предлагаю, чтобы ваш специальный метод запомнил этот факт в изменчивом поле. Затем интересующий поток должен прочитать эту переменную и спать дольше, если установлено.
Теперь, чтобы немедленно перевести его в режим сна , вы должны прервать поток. Это вызовет исключение, чтобы остановить текущую обработку. Теперь вам нужно разобраться с этим ... Подумайте, действительно ли это то, что вы хотите.
Другим решением было бы в нормальной активности потока также опросить переменную, как в первом случае, и засыпать, если она установлен. Это не приведет к немедленному засыпанию , но может произойти довольно быстро, и прерывание будет происходить в определенных точках вашего кода, где вы знаете, что можете остановиться, не нарушая работу ...