Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用thread.sleep或delay的工作经理不';行不通_Java_Oracle_Spring_Weblogic - Fatal编程技术网

Java 使用thread.sleep或delay的工作经理不';行不通

Java 使用thread.sleep或delay的工作经理不';行不通,java,oracle,spring,weblogic,Java,Oracle,Spring,Weblogic,我使用Spring框架和OracleWebLogic10.3作为容器。 我使用workmanager管理我的线程,我已经制作了一个由workmanager管理的线程。幸运的是,spring为使用workmanager提供了委托类,所以我只需要将其放在applicationContext.xml上 但是,当我将睡眠过程的“while”和时间单位设置为所需的延迟时间时,部署过程从未完成。部署过程似乎永远不会跳出while循环来完成部署 为什么?正如我所知道的,使用典型的线程,不存在这样的问题。我是否

我使用Spring框架和OracleWebLogic10.3作为容器。 我使用workmanager管理我的线程,我已经制作了一个由workmanager管理的线程。幸运的是,spring为使用workmanager提供了委托类,所以我只需要将其放在applicationContext.xml上

但是,当我将睡眠过程的“while”和时间单位设置为所需的延迟时间时,部署过程从未完成。部署过程似乎永远不会跳出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"));
    }
}
真的,先谢谢你。 问候,


Kahlil

嗯,线程将等待2小时多一点。您真的等了那么久才完成部署吗


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

对不起,实际上我已经将延迟设置为仅10秒,它也不起作用,进程总是每10秒循环一次,但发布状态从未完成。上面的代码是我最后一次修改,为了寻找另一种可能性,我增加了延迟。这是一个多么可笑的错误,你说得对!,我已经开始运行(),它运行得很好。