Prefácio
Recentemente, estou fazendo uma função das estatísticas de pontuação original. Os usuários definem parâmetros relevantes através da recepção e contam em tempo real em segundo plano e retornam dados. Relativamente falando, ainda existem muitas funções estatísticas, então vamos resumir aqui.
A melhor experiência do usuário é que todas as operações podem exibir dados em tempo real. Dentro de 3 segundos, deve estar dentro do intervalo de tolerância do usuário. Portanto, fazer um produto não apenas exige considerar o design de interação do usuário, mas também a otimização de back-end é indispensável.
Você pode simplesmente olhar para as 5 estatísticas acima. No geral, ainda existem muitas estatísticas. O mais importante é ser em tempo real, em tempo real e em tempo real (digamos coisas importantes três vezes). Obviamente, as tarefas de tempo não são realistas.
Antes da transformação
Lógica do programa
Execute tarefas sequencialmente.png
Após a transformação
Lógica do programa
Processamento paralelo multitarefa.png
O processamento paralelo multitarefa é adequado para CPUs com vários núcleos. As tarefas multithread executadas por CPUs de núcleo único podem ser contraproducentes (a comutação de contexto e a criação e destruição de roscas consumirão recursos), especialmente tarefas com uso intensivo de CPU.
Implementação de código
STATSDEMO Código pseudo:
/*** Estatísticas paralelas multitarefa* Criador kebang.com* Tempo de criação 16 de abril de 2018*/classe pública statsdemo {final estático SimpleDateFormat sdf = new SimpleDateFormat ("AAAA-MM-DD HH: MM: SS"); Final Static String InictTime = sdf.format (new Date ()); public static void main (string [] args) lança interruptedException {Countdownlatch latch = new Countdownlatch (5); // dois corredores estatísticas estatísticas1 = new stats ("Tarefa A", 1000, trava); STATS STATS2 = NOVAS ESTATS ("Tarefa B", 2000, trava); STATS STATS3 = novas estatísticas ("Tarefa C", 2000, trava); STATS STATS4 = NOVAS ESTATS ("TASK D", 2000, LATCH); STATS STATS5 = NOVAS ESTATS ("TASK E", 2000, LATCH); STATS1.START (); // Tarefa A começa a executar o STATS2.START (); // Tarefa B começa a executar o STATS3.START (); // Tarefa C começa a executar o STATS4.START (); // Tarefa D começa a executar o STATS5.START (); // Tarefa E inicia o Latch.Await (); // ALTERSTISTS.STEMT para o final do sistema. sdf.format (new Date ())); } classe estática estatísticas estende o thread {string statsName; int tempo de execução; Countdownlatch Latch; Estatísticas públicas (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 começa no"+ startTime); // simular thread de tempo de execução de tarefas.sleep (tempo de execução); System.out.println (STATSNAME + "DO ESTATAS COMPLETAS em" + sdf.format (new Date ())); latch.CountDown (); // Tarefa única termina, o contador é reduzido por um} catch (interruptedException e) {e.printStackTrace (); }}}}Como queremos retornar as estatísticas de maneira síncrona, usamos a classe Countdownlatch aqui, que é uma nova classe de ferramentas simultânea adicionada no Java 5. É muito simples de usar. As etapas de uso detalhadas são fornecidas com referência ao pseudo-código acima.
O CountdownLatch é usado para sincronizar uma ou mais tarefas, forçando -as a aguardar um conjunto de operações executadas por outras tarefas a serem concluídas. O uso típico do Countdownlatch é dividir um programa em N Tarefas independentes de solucionador e criar um Countdownlatch com um valor de N. Quando cada tarefa for concluída, a contagem regressiva será chamada nessa trava, e a tarefa que aguarda o problema a ser resolvida chamará o aguardando essa trava e os bloqueará até que a contagem de trava termine.
Para uma interpretação específica do código -fonte, você pode consultar: Código fonte CountdownLatch
Código fonte do projeto: https://gitee.com/52itstyle/spring-data-jpa
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.