Ti posto la mia soluzione, con un codice facilmente customizzabile.
- thread T1 con frequenza 1 secondo ed esecuzione totale 3 secondi
- thread T2 con frequenza 1 secondo ed esecuzione totale 4 secondi
codice:import java.util.concurrent.*; import static java.util.concurrent.TimeUnit.*; class T1 implements Runnable { public void run() { System.out.println("T1"); } } class T2 implements Runnable { public void run() { System.out.println("T2"); } } class Demo { private ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); private ScheduledFuture<?> t1Handle, t2Handle; public Demo() { StopT2StartT1(); } private void StopT2StartT1() { if (t2Handle != null) t2Handle.cancel(true); // T1: frequenza 1 secondo t1Handle = scheduler.scheduleAtFixedRate(new T1(), 0, 1, SECONDS); // 3 secondi di esecuzione totale scheduler.schedule(new Runnable() { public void run() { StopT1StartT2(); } }, 3, SECONDS); } private void StopT1StartT2() { t1Handle.cancel(true); // T2: frequenza 1 secondo t2Handle = scheduler.scheduleAtFixedRate(new T2(), 0, 1, SECONDS); // 4 secondi di esecuzione totale scheduler.schedule(new Runnable() { public void run() { StopT2StartT1(); } }, 4, SECONDS); } public static void main(String args[]) { new Demo(); } }

Rispondi quotando