Préface
Récemment, je fais une fonction des statistiques de score d'origine. Les utilisateurs définissent les paramètres pertinents via la réception et comptent en temps réel en arrière-plan et renvoient les données. Relativement parlant, il existe encore de nombreuses fonctions statistiques, alors résumons-les ici.
La meilleure expérience utilisateur est que chaque opération peut afficher des données en temps réel. Dans les 3 secondes, cela devrait être dans la plage de tolérance de l'utilisateur. Par conséquent, la fabrication d'un produit nécessite non seulement la conception d'interaction des utilisateurs, mais également l'optimisation back-end est indispensable.
Vous pouvez simplement consulter les 5 statistiques ci-dessus. Dans l'ensemble, il y a encore beaucoup de statistiques. La chose la plus importante est d'être en temps réel, en temps réel et en temps réel (dire des choses importantes trois fois). De toute évidence, les tâches de synchronisation sont irréalistes.
Avant la transformation
Logique du programme
Exécuter les tâches séquentiellement.png
Après la transformation
Logique du programme
Traitement parallèle multitâche.png
Le traitement parallèle multitâche convient aux processeurs multi-core. Les tâches multi-thread effectuées par des processeurs monomores peuvent être contre-productifs (la commutation de contexte et la création et la destruction de threads consommeront des ressources), en particulier les tâches à forte intensité de processeur.
Implémentation de code
STATSDEMO Pseudo Code:
/ ** * Statistiques parallèles multitâches * Créateur kebang.com * Temps de création 16 avril 2018 * / classe publique StatSdemo {final statique simpledateFormat sdf = new SimpledateFormat ("yyyy-mm-dd hh: mm: ss"); Final Static String startTime = sdf.format (new Date ()); public static void main (String [] args) lève InterruptedException {CountDownLatch latch = new CountdownLatch (5); // deux statistiques de coureurs stats1 = nouvelles statistiques ("tâche A", 1000, Latch); Stats Stats2 = nouvelles statistiques ("Tâche B", 2000, Latch); Stats Stats3 = nouvelles statistiques ("Tâche C", 2000, Latch); Statistiques stats4 = nouvelles statistiques ("tâche D", 2000, Latch); Statistiques stats5 = nouvelles statistiques ("tâche E", 2000, verrou); statts1.start (); // tâche A démarre l'exécution de stats2.start (); // tâche b commence à exécuter stats3.start (); // tâche c commence à exécuter stats4.start (); // tâche d commence à exécuter statts5.start (); // tâche e commence à exécuter Latch.Await (); // attendant que tout le monde finisse le système. sdf.format (new Date ())); } static static statts étend Thread {String statSname; int runtime; CountdownLatch Latch; Public Stats (String StatSname, int runtime, CountdownLatch Latch) {this.statsname = statSname; this.runtime = runtime; this.latch = latch; } public void run () {try {System.out.println (statSname + "Do statistiques commencent à" + starttime); // Simuler le temps d'exécution de la tâche Thread.Sleep (Runtime); System.out.println (StatsName + "DO STATS ENTRÉMENTATIVE AT" + SDF.Format (new Date ())); Latch.CountDown (); // Tâche unique se termine, le compteur est réduit de One} Catch (InterruptedException e) {e.printStackTrace (); }}}}Étant donné que nous voulons retourner des statistiques de manière synchrone, nous utilisons la classe CountdownLatch ici, qui est une nouvelle classe d'outils simultanée ajoutée dans Java 5. Il est très simple à utiliser. Les étapes d'utilisation détaillées sont données en référence au pseudo-code ci-dessus.
CountdownLatch est utilisé pour synchroniser une ou plusieurs tâches, les forçant à attendre un ensemble d'opérations effectuées par d'autres tâches à effectuer. L'utilisation typique de CountdownLatch consiste à diviser un programme en n tâches de solveur indépendantes et à créer un compte à rebours avec une valeur de N. Lorsque chaque tâche sera terminée, le compte à rebours sera appelé sur ce verroi, et la tâche en attendant que le problème sera résolue l'appel de ce verrou et les bloqueront eux-mêmes jusqu'à ce que le décompte des verrous soit terminé.
Pour une interprétation spécifique du code source, vous pouvez vous référer à: Analyse du code source Compte à rebours
Code source du projet: https://gitee.com/52itstyle/spring-data-jpa
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.