Cet article explore principalement l'utilisation de la programmation concomitante Java et de l'avenir de la programmation concurrente, et partage les codes d'exemples pertinents, et les détails sont les suivants.
Nous savons tous qu'il existe deux façons d'implémenter le multi-threading. L'un consiste à hériter du thread et l'autre est d'implémenter Runnable. Cependant, ces deux manières ont un défaut et le résultat de retour ne peut pas être obtenu une fois la tâche terminée. Pour obtenir le résultat de retour, vous devez utiliser Callable. La tâche appelable peut avoir une valeur de retour, mais elle ne peut pas obtenir directement la valeur de retour à partir de la tâche appelée; Si vous souhaitez obtenir la valeur de retour de la tâche appelable, vous devez utiliser Future. Les tâches et le mode futur sont donc généralement utilisés en combinaison.
Imaginez un scénario: vous avez besoin d'une interface de liste de post. En plus de retourner la liste des messages, vous devez également renvoyer la liste similaire et commentaire de chaque publication. Pour les calculs de 10 publications sur une page, cette interface nécessite l'accès à la base de données 21 fois. Une fois l'accès à la base de données, la base de données est calculée sur la base de 100 ms, 21 fois, et le temps cumulatif est de 2,1 s. Ce temps de réponse n'est probablement pas satisfaisant. Ce qu'il faut faire? Transformation asynchrone des interfaces.
Après avoir découvert la liste des messages, itérez sur la liste des messages, démarrez 10 threads dans la boucle et obtenez simultanément la liste similaire de chaque message, et en même temps, 10 threads sont configurés pour obtenir la liste des commentaires de chaque message. Après cette transformation, le temps de réponse de l'interface est considérablement raccourci à 200 ms. Pour le moment, nous devons utiliser Callabel combiné avec l'avenir pour y parvenir.
Liste privée <ostResponse> createPoStResponseList (page <SprSponse> Page, Final String userId) {if (page.getCount () == 0 || page == null || page.getList () == null) {return null; } // Obtenez la liste de publication Liste <SosTResponse> circleResponseList = page.getList (); int size = circleResponseList.size (); ExecutorService commentpool = exécutors.newFixEdThreadPool (taille); ExecutorService supportPool = exécutors.newFixEdThreadPool (taille); essayez {list <future> commentfutureList = new ArrayList <future> (taille); if (circleResponseList! = null && circleResponseList.size ()> 0) {for (posTesponse PostResponse: circleResponseList) {final String CircleId = posTesponse.getid (); String final POSTUSERID = PostResponse.getUserId (); // coche la liste des commentaires callable <list <circlereviews>> callableComment = new Callable <list <circlereviews>> () {@Override public list <circlereviews> complets () lève exception {return circlereViewsBiz.getPostComments (cercleId); }}; Future f = commentpool.submit (callableComment); commentfuturelist.add (f); // Vérifiez la liste similaire callable <list <cclenzan>> callableSupport = new Callable <list <cclenzan>> () {@Override public List <Circlezan> Call () lève une exception {return Circlezanbiz.FindList (CircleId); }}; Future SupportFuture = SupportPool.Submit (callableSupport); commentfutureList.add (supportFuture); }} // Obtenez les résultats d'exécution de toutes les tâches simultanées int i = 0; Temps postponse = null; pour (futur f: commentfutureList) {temp = circleResponseList.get (i); Temp.SetCommentList ((list <circlereViews>) f.get (); temp.setsupportlist ((list <cclenzan>) f.get (); circleResponselist.set (i, temp); i ++;}} catch (exception e) {e.printstackTrace ();} enfin {// close the thread commentpool.shutdown ();); Retour CirleResponseList;}Résumer
Ce qui précède est l'intégralité du contenu de cet article sur l'exemple d'application Code de la programmation concurrente Java appelée et futur. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!