J'ai soumis deux tâches, task1
& task2
à ExecutorService. Tâche2 a besoin de 5 secondes pour terminer, et tâche1 besoin de 10 secondes. Comment puis-je arrêter la (les) tâche (s) soumise (s) (tâche1) lorsque la tâche 2 est terminée et poursuivre le reste de la logique?Comment annuler une tâche incomplète sur ExecutorService
Voici mon code à ce jour:
public class mt_poc {
public static void action_1() throws InterruptedException {
System.out.println("action_1 invoke ");
Thread.sleep(10000);
action_2();
System.out.println("action_1 done");
}
public static void action_2() throws InterruptedException {
System.out.println("action_2 invoke ");
Thread.sleep(5000);
System.out.println("action_2 done ");
}
public static void main(String[] args) {
System.out.println("TEST");
Runnable task1 = new Runnable() {
public void run() {
try {
action_1();
}
catch(InterruptedException e) {
System.out.println("action_1 invoke interrupted");
}
System.out.println("action_1 invoke run is over");
}
};
Runnable task2 = new Runnable() {
public void run() {
try {
action_2();
}
catch(InterruptedException e) {
System.out.println("action_2 invoke interrupted");
}
System.out.println("action_2 invoke run is over");
}
};
ExecutorService executor = Executors.newFixedThreadPool(2);
try {
executor.submit(task1);
executor.submit(task2);
// cancel uncomplete task
executor.shutdown();
executor.awaitTermination(5, TimeUnit.SECONDS);
// continues the rest of logic
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Shutdown executor");
}
}