Работа диспетчера с использованием thread.sleep или задержки не работает - PullRequest
0 голосов
/ 26 мая 2010

Я использовал Spring Framework и Oracle Weblogic 10.3 в качестве контейнера. Я использовал workmanager для управления своим потоком, я уже создал один поток, которым управляет workmanager. К счастью, весна предоставляет класс делегирования для использования workmanager, поэтому мне просто нужно поместить его в applicationContext.xml.

Но когда я помещаю "while" и TimeUnit для режима ожидания в желаемое время задержки, процесс развертывания никогда не завершается. Похоже, что процесс развертывания никогда не выпадет из цикла while для завершения развертывания.

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

import java.util.concurrent.TimeUnit;

import org.springframework.core.task.TaskExecutor;

public class TaskExecutorSample{
    Boolean shutdown = Boolean.FALSE;
    int delay = 8000;
    TimeUnit unit = TimeUnit.SECONDS;

    private class MessageGenerator implements Runnable {
        private String message;
        public MessageGenerator(String message){
            this.message = message;
        }

        @Override
        public void run() {
            System.out.println(message);
        }
    }


    private TaskExecutor taskExecutor;
    public TaskExecutorSample(TaskExecutor taskExecutor){
        this.taskExecutor = taskExecutor;
        try {
            while (shutdown.equals(Boolean.FALSE)){
                this.printMessage();
                unit.sleep(delay);
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public void printMessage() {
        taskExecutor.execute(new MessageGenerator("Print this Messages"));
    }
}

Действительно, заранее спасибо. С уважением,

Халиль

1 Ответ

0 голосов
/ 26 мая 2010

Ну, поток будет ждать чуть более 2 часов. Вы действительно так долго ждали окончания развертывания?

[EDIT] Вы, вероятно, делаете ожидание не в том месте: вы должны ждать в методе run() потока, а не в конструкторе класса.

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