Prefacio
Recientemente, estoy haciendo una función de las estadísticas de puntaje originales. Los usuarios establecen parámetros relevantes a través de la recepción y cuentan en tiempo real en segundo plano y devuelven datos. Hablando relativamente, todavía hay muchas funciones estadísticas, así que resumamos aquí.
La mejor experiencia de usuario es que cada operación puede mostrar datos en tiempo real. En 3 segundos, debe estar dentro del rango de tolerancia del usuario. Por lo tanto, hacer un producto no solo requiere considerar el diseño de interacción del usuario, sino que también es indispensable.
Simplemente puede mirar las 5 estadísticas anteriores. En general, todavía hay muchas estadísticas. Lo más importante es ser en tiempo real, en tiempo real y en tiempo real (digamos cosas importantes tres veces). Obviamente, las tareas de tiempo no son realistas.
Antes de la transformación
Lógica del programa
Ejecutar tareas secuencial.png
Después de la transformación
Lógica del programa
Procesamiento paralelo de multitarea.png
El procesamiento paralelo multitarea es adecuado para las CPU de múltiples núcleos. Las tareas multiproceso realizadas por las CPU de un solo núcleo pueden ser contraproducentes (el cambio de contexto y la creación y destrucción de hilos consumirán recursos), especialmente tareas intensivas en CPU.
Implementación del código
STATSDEMO Pseudo Code:
/*** Multitarea estadística paralela* creador kebang.com* Tiempo de creación 16 de abril de 2018*/public class StatsDemo {final static simpledateFormat sdf = new SimpleDateFormat ("yyyy-mm-dd hh: mm: ss"); Final static string starttime = sdf.format (nueva fecha ()); public static void main (string [] args) lanza interruptedException {CountdownLatch Latch = new CountdownLatch (5); // Dos corredores STATS STATS1 = nuevas estadísticas ("Tarea A", 1000, Latch); STATS STATS2 = nuevas estadísticas ("Tarea B", 2000, Latch); STATS STATS3 = nuevas estadísticas ("Tarea C", 2000, Latch); STATS STATS4 = nuevas estadísticas ("Tarea D", 2000, Latch); STATS STATS5 = nuevas estadísticas ("Tarea E", 2000, Latch); stats1.start (); // Tarea A comienza a ejecutar stats2.start (); // La tarea B comienza a ejecutar stats3.start (); // tarea C comienza a ejecutar stats4.start (); // tarea d comienza sdf.format (nueva fecha ())); } estadísticas de clase estática extiende el hilo {String statsName; int tiempo de ejecución; 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 stats comienzan en"+ starttime); // simular la ejecución de la tarea TIEMH.Sleep (Runtime); System.out.println (statsname + "do estadísticas completadas en" + sdf.format (new date ())); Latch.CountDown (); // Tarea única termina, el contador se reduce por una} Catch (InterruptedException e) {E.PrintStackTrace (); }}}}Dado que queremos devolver las estadísticas sincrónicamente, usamos la clase CountdownLatch aquí, que es una nueva clase de herramientas concurrentes agregada en Java 5. Es muy simple de usar. Los pasos de uso detallados se dan con referencia al pseudo-código anterior.
CountdownLatch se usa para sincronizar una o más tareas, obligándolas a esperar un conjunto de operaciones realizadas por otras tareas para completar. El uso típico de CountdownLatch es dividir un programa en n tareas de solucionadores independientes y crear una cuenta CountdownLatch con un valor de N. Cuando cada tarea se complete, se convocará en este pestillo, y la tarea que se espera que se resuelva el problema llamará a la esperanza de este pestillo y se bloqueará hasta que termine el recuento de lacrimensiones.
Para una interpretación específica del código fuente, puede consultar: análisis del código fuente CountdownLatch
Código fuente del proyecto: https://gitee.com/52itstyle/spring-data-jpa
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.