【问题标题】:Work manager using thread.sleep or delay doesn't work使用 thread.sleep 或延迟的工作管理器不起作用
【发布时间】:2010-05-26 07:53:12
【问题描述】:

我使用 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"));
    }
}

真的提前谢谢你。 问候,

卡利尔

【问题讨论】:

    标签: java oracle spring weblogic


    【解决方案1】:

    好吧,线程将等待超过 2 小时。您真的等了那么久才完成部署吗?

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

    【讨论】:

    • 对不起,其实我已经设置了延迟只有10秒,它也不起作用,这个过程总是每10秒循环一次,但发布状态从未完成。上面的代码是我最后一次修改,为了寻求另一种可能性,我扩大了延迟。
    • 多么荒谬的错位,你说得对!我已经把它放到了 run() 中,它运行良好。
    猜你喜欢
    • 1970-01-01
    • 2017-12-28
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多