2011-08-24 6 views
5

Obecnie mam zaplanowane wykonawcę, który wysyła wiadomości z opóźnieniem jak ten:Anulowanie zaplanowane wykonawcę

 executor.schedule(new Runnable() { 
      public void run() { 
       emitter.emit(message); 
      } 
     }, delay, TimeUnit.MILLISECONDS); 

muszę mieć inny wątek, który będzie nasłuchiwał wiadomości anulować który wyśle ​​inny komunikat i Muszę przerwać wysyłanie powyższej wiadomości. Jeśli nie zostanie odebrany żaden komunikat anulowania, powyższe wiadomości będą wysyłane jako normalne. Jaki jest najlepszy sposób na zrobienie tego?

Dzięki.

Odpowiedz

9

Można to zrobić za pomocą wartość powrotną

ScheduledFuture<?> future = executor.schedule(new Runnable() { 
     public void run() { 
     emitter.emit(message); 
    } 
    }, delay, TimeUnit.MILLISECONDS); 
future.cancel(true); //true if task should be interrupted 

lub za pomocą sposobu zamykania() na wykonawcy.
Spójrz na shutdown() i cancel()