1. Décrivez et narrative
Lors de la programmation sous multithreading. Vous pouvez rencontrer un besoin, c'est-à-dire que lorsque les threads que j'ouvrent, je veux obtenir les données renvoyées dans chaque thread en même temps, puis effectuer un traitement unifié. En vertu de cette exigence, la combinaison de l'avenir et de l'appelable est très utile.
Certaines personnes peuvent également dire que je peux utiliser la synchronisation pour répondre à cette exigence, mais elle est en effet possible dans les cas ordinaires. Mais dans un cas particulier, cela ne fonctionnera pas:
Imaginez que vous avez permis à plusieurs threads de calculer de manière synchrone certaines données, mais tout le monde sait que les threads concurrenceront les ressources, c'est-à-dire. Lorsque vous permettez à plusieurs threads de synchroniser le calcul des données. En fait, l'ordre de calcul entre les fils ne peut pas être nul, bien sûr, il n'est pas impossible de le faire face à moins que vous ne fassiez une grosse erreur. Dans un tel cas. La combinaison de l'avenir et de l'appel est le meilleur choix.
2. Exemples d'échantillons
Les exemples de ces deux catégories sont en fait très faciles, principalement selon que vous pouvez trouver leur utilisation dans une utilisation réelle. Sur le code:
test de package; Importer java.util.concurrent.callable; import java.util.concurrent.executionException; import java.util.concurrent.executorservice; import java.util.concurrent.executors; import java.util.concurrent.future; Classe publique FeatureCallableTest {private static ExecutorService Service = exécutors.newFixeDThreadPool (100); Count statique statique privé = 1; public static void main (String [] args) lève InterruptedException, ExecutionException {int sum = 0; pour (int i = 0; i <100; i ++) {futur <Integer> futur = service.submit (new Calable <Integer> () {@Override public Integer Call () lève une exception {System.out.println (thread.currentThread (). GetName ()); return ++ count;}}); int f = future.get (); sum + = f; System.out.println ("Future Is" + F); } System.out.println ("sum is" + sum); service.shutdownNow (); }}