Как заморозить нить (Thread) извне?

291
21 мая 2017, 21:28

Если мы создаем нить, то можем заморозить ее на время в методе run, но каким образом мы можем остановить ее на время извне?

public static void main(String[] args) throws InterruptedException {
    Thread t = new Thread() {
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                try {
                    sleep(400);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(i);
            }
        }
    };
    t.start();
    Thread.sleep(2000);
//  Здесь должна быть команда которая позволяет заморозить выполнение нити t на 3 секунды
    System.out.println("Нить t остановлена на 3 секунды");
}

UPDATE: Удалось пока решить вот так, но, может, кто подскажет лучшее решение:

public static void main(String[] args) throws InterruptedException {
    class TestThread extends Thread {
        private boolean flag;
        public void setFlag(boolean flag) {
            this.flag = flag;
        }
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                try {
                    sleep(400);
                    if (flag)
                        sleepMe();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(i);
            }
        }
        private void sleepMe() {
            try {
                sleep(3000);
                flag = false;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    TestThread t = new TestThread();
    t.start();
    Thread.sleep(2000);
    t.setFlag(true);
    System.out.println("Нить t остановлена на 3 секунды");
}
READ ALSO
libgdx textField границы для текста

libgdx textField границы для текста

Как можно установить границы для текста? Откуда будет начинаться текста и до куда? Текст пересекает рамку, которая поставлена как задний...

426
Запрос прав Android 6.0

Запрос прав Android 6.0

Есть ли возможность как-то проще работать с runtime разрешениями в Android 60 и выше? Сейчас приходится делать как в этой статье и даже для одного...

259
Помогите реолизовать метод Set и Insert

Помогите реолизовать метод Set и Insert

Добрый вечер, помогите докончить этот код: метод set это изменять элемент, но как я не знаю, а insert вставить элемент, те

272
Не посылает запрос JQuery Ajax в JS

Не посылает запрос JQuery Ajax в JS

ЗдравствуйтеТакая проблема, не посылается запрос autocomplete на выполнение сервлета, смотрю через стандартный Chrome инструментарий

277