Java - Thread - Проблема в одном из учебных пособий Sun - PullRequest
2 голосов
/ 03 мая 2010

Я читал этот учебник Sun по теме .

Я нашел там блок кода, который, я думаю, может быть заменен кодом из меньшего количества строк. Интересно, почему опытные программисты Sun так долго шли, когда задачу можно выполнить с помощью кода, содержащего меньше строк.

Я задаю этот вопрос, чтобы знать, что если мне не хватает чего-то, что учебник хочет передать.

Блок кода выглядит следующим образом:

    t.start();

    threadMessage("Waiting for MessageLoop thread to finish");
    //loop until MessageLoop thread exits
    while (t.isAlive()) {
        threadMessage("Still waiting...");
        //Wait maximum of 1 second for MessageLoop thread to
        //finish.
        t.join(1000);
        if (((System.currentTimeMillis() - startTime) > patience) &&
                t.isAlive()) {
            threadMessage("Tired of waiting!");
            t.interrupt();
            //Shouldn't be long now -- wait indefinitely
            t.join();
        }

    }
    threadMessage("Finally!");

Я думаю, что приведенный выше код можно заменить следующим:

t.start();
t.join(patience); // InterruptedException is thrown by the main method so no need to handle it

if(t.isAlive()) {
    // t's thread couldn't finish in the patience time
    threadMessage("Tired of waiting!");
    t.interrupt();
    t.join();
}

threadMessage("Finally!");

Ответы [ 2 ]

4 голосов
/ 03 мая 2010
t.join(1000) 

Этот код на самом деле не должен быть настолько умным, насколько это возможно, но он есть для демонстрации использования, я думаю

0 голосов
/ 05 февраля 2014

Этот пример предназначен для передачи двух потоков, основного и того, который вы запустили, работающих одновременно. Код на самом деле не делает ничего полезного, но пример Suns покажет «Все еще ждет ...» с сообщениями из потока, который печатает строки.

Если вы смотрите на это в форме того, что на самом деле делает треска, да, они оба делают одно и то же. Оба примера 1) Начать тему т 2) будет ждать до patience мс 3) прерывание потока т 4) Подождите, пока он не умрет 5) Распечатать "Наконец" из основной темы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...