2012-08-03 2 views
3

나는 자바 스케쥴러에 하나의 문제점이있다. 나의 실제 요구는 특정 시간에 내 프로세스를 시작해야하고, 특정 시간에 멈추고 특정 시간에 내 프로세스를 시작할 수 있지만 특정 프로세스를 멈출 수 없다. 시간, 스케줄러에서 얼마나 오랫동안 프로세스를 실행할지를 지정하는 방법 (여기서는 넣지 않을 것입니다)에 대한 제안이 있습니다.특정 시간에 작업을 예약하는 방법은 무엇입니까?

import java.util.Timer; 
import java.util.TimerTask; 
import java.text.SimpleDateFormat; 
import java.util.*; 
public class Timer 
{ 
    public static void main(String[] args) throws Exception 
    { 

        Date timeToRun = new Date(System.currentTimeMillis()); 
        System.out.println(timeToRun); 
        Timer timer1 = new Timer(); 
        timer1.schedule(new TimerTask() 
        { 
        public void run() 
           { 

         //here i call another method 
         } 

        } }, timeToRun);//her i specify my start time 


      } 
} 

답변

10

당신은 작업을 실행하려면 하나를 ScheduledExecutorService 2 일정을 사용할 수 있습니다 하나는 그것을 중지 - 간단한 예를 아래 참조 :

public static void main(String[] args) throws InterruptedException { 
    final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2); 

    Runnable task = new Runnable() { 
     @Override 
     public void run() { 
      System.out.println("Starting task"); 
      scheduler.schedule(stopTask(),500, TimeUnit.MILLISECONDS); 
      try { 
       System.out.println("Sleeping now"); 
       Thread.sleep(Integer.MAX_VALUE); 
      } catch (InterruptedException ex) { 
       System.out.println("I've been interrupted, bye bye"); 
      } 
     } 
    }; 

    scheduler.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS); //run task every second 
    Thread.sleep(3000); 
    scheduler.shutdownNow(); 
} 

private static Runnable stopTask() { 
    final Thread taskThread = Thread.currentThread(); 
    return new Runnable() { 

     @Override 
     public void run() { 
      taskThread.interrupt(); 
     } 
    }; 
} 
관련 문제