Différences entre les méthodes submit() et execute() en Java
méthodes submit() vs execute() en Java
Ici, nous verrons comment submit() diffère de la méthode execute() en Java ?
méthode submit()
- Cette méthode est disponible dans le package java.util.concurrent.
- soumettre() est utilisée pour soumettre une tâche à ThreadPool.
- Cette méthode est une méthode surchargée.
- méthode de soumission() accepte une tâche exécutable ou appelable (c'est-à-dire que cette méthode ne prend qu'un seul argument, qu'elle soit exécutable ou appelable).
- soumettre() est une méthode statique de l'interface ExecutorService donc cette méthode est également accessible avec le nom de classe.
- Le type de retour de cette méthode est un objet Future, elle renvoie donc un objet de type Future qui contient le calcul des résultats en attente.
- L'interface ExecutorService est une interface enfant d'Executor.
- La syntaxe de la méthode submit() est donné ci-dessous :
Future f_obj = ExecutorService_obj . submit(new Runnable(){}); Future f_obj = ExecutorService_obj . submit(new Callable(){});
- Nous devrions opter pour submit() si nous voulons calculer un plus grand nombre de calculs comme calculer la valeur de la tarte, etc. et renvoyer les résultats dans le calcul.
Exemple :Submit() pour accepter la tâche exécutable
// Java program to demonstrate the behavior of submit() method // of ExecutorService interface import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; public class SubmitATaskBySubmitMethod { public static void main(String[] args) throws Exception { // Allow one thread from ThreadPool ExecutorService exe_ser = Executors.newFixedThreadPool(1); // By using submit() we are accepting Runnable task Future f = exe_ser.submit(new Runnable() { // Override run() method and will define a job inside it public void run() { System.out.println("Submitting a task by using submit() method"); } }); // This method will return null if task has finished perfectly // (i.e. without any error) System.out.println(f.get()); } }
Sortie
Submitting a task by using submit() method null
Exemple :Submit() pour accepter une tâche appelable
// Java program to demonstrate the behavior of submit() method // of ExecutorService interface import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Callable; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; public class SubmitATaskBySubmitMethod { public static void main(String[] args) throws Exception { // Allow one thread from ThreadPool ExecutorService exe_ser = Executors.newFixedThreadPool(1); // By using submit() we are accepting Callable task Future f = exe_ser.submit(new Callable() { // Override call() method and will define a job inside it public Object call() { System.out.println("Submitting a Callable task by using submit() method"); return "Callable Task"; } }); // This method will return null if task has finished perfectly // (i.e. without any error) System.out.println(f.get()); } }
Sortie
Submitting a Callable task by using submit() method Callable TaskPublicité
Ici, nous verrons comment submit() diffère de la méthode execute() en Java ?
méthode execute()
- Cette méthode est disponible dans le package java.util.concurrent.
- méthode execute() est utilisé pour exécuter une tâche sur ThreadPool.
- méthode execute() accepte uniquement Runnable (c'est-à-dire que cette méthode ne prend qu'un seul argument et qu'elle est Runnable et qu'elle n'accepte pas les tâches Callable comme la méthode submit()).
- exécuter() est une méthode statique de l'interface Executor donc cette méthode est également accessible avec le nom de la classe.
- Le type de retour de cette méthode est void donc elle ne retourne rien et ne donnera aucun résultat.
- L'interface Executor est une interface parente de ExecutorService.
- Interface exécuteur déclarée execute(Runnable) méthode dont le but principal est de séparer la tâche de son exécution.
- La syntaxe de la méthode execute() est donnée ci-dessous :
ExecutorService_obj . execute(new Runnable(){});
- Nous devrions opter pour execute() si nous voulons exécuter notre code par thread de travail du pool de threads et ne retourne rien.
Exemple :
// Java program to demonstrate the behavior of execute() method // of Executor interface import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SubmitATaskByExecuteMethod { public static void main(String[] args) throws Exception { // Allow one thread from ThreadPool ExecutorService exe_ser = Executors.newFixedThreadPool(1); // By using execute() we are accepting Runnable task exe_ser.execute(new Runnable() { // Override run() method and will define a job inside it public void run() { System.out.println("Submitting a task by using execute() method"); } }); // This method performs previous submitted task before termination exe_ser.shutdown(); } }
Sortie
Submitting a task by using execute() method