2010-05-26 3 views
0

저는 스프링 프레임 워크와 oracle weblogic 10.3을 컨테이너로 사용했습니다. workmanager를 사용하여 내 스레드를 관리했습니다. 이미 workmanager에서 관리하는 하나의 스레드를 만들었습니다. 다행스럽게도 spring은 workmanager를 사용하기위한 위임 클래스를 제공하므로 applicationContext.xml에 배치하면된다.thread.sleep 또는 지연을 사용하는 작업 관리자가 작동하지 않습니다.

그러나 "잠시 동안"및 "잠시 기다려주십시오"프로세스를 원하는 지연 시간에 배치하면 배포 프로세스가 완료되지 않습니다. 배포 프로세스가 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

답변

0

음, 스레드는 2 시간보다 조금 더 기다립니다. 배포가 끝나기까지 오래 기다렸습니까?

[편집] 틀린 장소에서 대기하고있을 가능성이 높습니다. 클래스의 생성자가 아니라 스레드의 run() 메소드에서 기다려야합니다.

+0

죄송합니다. 사실 저는 이미 지연 시간을 10 초로 설정했으나 작동하지 않습니다. 프로세스는 항상 10 초마다 반복되지만 게시 상태는 완료되지 않았습니다. 위의 코드는 마지막 수정이며 다른 가능성을 찾기 위해 지연을 확대했습니다. –

+0

당신이 옳다는 말은 완전히 우스 꽝스러운 것입니다! 나는 이미 뛰었고(), 잘 작동합니다. –

관련 문제