2012-08-03 2 views
3

У меня есть одна проблема с планировщиком java, мне действительно нужно, чтобы я начал свой процесс в определенное время, и я остановлюсь в определенное время, я могу начать свой процесс в определенное время, но я не могу остановить свой процесс на определенных время, как указать процесс, как долго работать в планировщике (здесь я не буду указывать время), у кого есть предложение для этого.Как назначить задачу в определенное время?

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(); 
     } 
    }; 
} 
Смежные вопросы