使用thread.sleep或延迟的工作管理器不起作用

时间:2010-05-26 07:53:12

标签: java oracle spring weblogic

我使用Spring框架和oracle weblogic 10.3作为容器。 我使用workmanager来管理我的线程,我已经创建了一个由workmanager管理的线程。幸运的是spring提供了使用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 :(得分:0)

好吧,线程会等待2小时以上。你真的等了很长时间才完成部署吗?

[编辑]你可能在错误的地方做等待:你应该等待线程的run()方法,而不是类的构造函数。