O pacote java.util.Concurrent oferece classes sobre operações multithread. Os comumente usados são executores e suas classes de implementação (como ThreadpoolExector etc.), executor, executores, futuro, chamadas, etc.
1. Interface ExecutorService (herdada do executor): fornece alguns métodos de operação com vários threads assíncronos, como Execute (), submit (), Shutdown (), ShutdownNow (), etc.
2. Interface do executor: execute a tarefa enviada (thread), com apenas um método executado (executável a)
2.
3. Interface Futrue: representa o resultado da execução do thread, fornece métodos para obter o resultado da execução do thread e cancelar threads, como get (), cancle (), etc.
4. Interface chamada: o thread com o valor de retorno é fornecido pelo JDK1.5 para executar uma nova interface
Faça registros simples da compreensão do ExecutorService e Future
Código:
classe pública principal {private static int count = 0; public static void main (string [] args) {list <tuture> resultList = new LinkedList <> (); /*** Executores.newcachedThreadpool () Crie um pool de cache de threads. Se a rosca não for usada nos anos 60, o fio será interrompido e removido do pool de cache* executores.newscheduledthreadpool () Crie um pool de threads com capacidade fixa, e os threads internos são executados de acordo com o pool de cache de cache de cache* executores* executores.NewfixedThreadPool () um pool de cache com capacidade fixa* executores. thread*/ ExecutSerService ExecorService = executores.newcachedthreadpool (); para (int i = 0; i <10; i ++) {futuro FUTURO = ExecutorService.subMit (novo callable <string> () {@Override public String Call () {try {System.out.println (thread.currentThread (). getName ()); thread.sleep (5000);} Main.Count; resultadolist.add (futuro); } executorService.shutdown (); for (futuro futuro: resultList) {try {System.out.println (futura.get () + ".. está sobre ..."); } catch (interruptedException e) {e.printStackTrace (); } catch (ExecutionException e) {e.printStackTrace (); }} System.out.println ("Principal End Thread ..."); }}Saída:
Pool-1-thread-1pool-1-thread-2pool-1-thread-3pool-1-thread-4pool-1-thread-5pool-1-thread-6pool-1-thread-7pool-1-thread-8Pool-1-thread-9Pool-1-Thread-10Pool-1-Thread-1-Tart-1-Thread-1-Thread-1-Thread-1-Thread. Contagem principal: ... 1Pool-1-thread-2..END Contagem principal: ... 1POOL-1-THREAD-1..END PRINCIPAL Contagem: ... 1POOL-1-THREAD-3 .. CONTAÇÃO PRINCIPAL: ... 1POOL-1-THREAD-2 .. CONTAGEM PRINCIPAL: ... 1POOL-1-THREAD-1.. END Count: ... 1Pool-1-Thread-3-1-1-1-1-1-Thread-1 ... End Count: ... 1Pool-1-Thread-3-1-1-1-1-1-1-Thread-1 ... end: ... 1Pool-1-Thread-1. Over ... Pool-1-Thread-4..Star a contagem principal: ... 2POOL-1-THREAD-3..S Over ... Pool-1-Thread-4..End Contagem principal: ... 3Pool-1-thread-4..s Over ... Pool-1-thread-5.Start Count principal: ... 3Pool-1-Thread-5 .. Principal Pool: ... 4Pool-1-Thart-5. Contagem: ... 4POOL-1-THREAD-6..END PRINCIPAL CONTA: ... 4POOL-1-THREAD-6..END PRINCIPAL CONTA: ... 4POOL-1-THREAD-6 .. CONTAÇÃO PRINCIPAL PRINCIPAL: ... 4POOL-1-THREAD-6..END PRINCIPAL Count: ... 4POOL-1-THREAD-6.. END CUNTILHO: ... 5Pool-1-thread-6-IS sobre ... Pool-1-Thread-6. CONTA: ... 6POOL-1-THREAD-7..STER Over ... Pool-1-Thread-8 .. Compreenda a contagem principal: ... 6POOL-1-THREAD-8..END CANTRA PRINCIPAL: ... 7POOL-1-THREAD-8.. IS Over ... Pool-1-thread-9..start contagem: ... 7pool-1-thread-9..End Pool-1-1-thread-thread-9. Contagem: ... 7Pool-1-thread-9..End Principal Contagem: ... 8POOL-1-THREAD-9 .. está acima ... Pool-1-thread-10..Star a contagem principal: ... 8POOL-1-THREAD-9.. IS Over ... Pool-1-thread-10..start contagem principal: ... 8Pool-1-THE-10 ... ENDENDOT-THEAD-10 ... execução
O console imprime o resultado da saída acima depois de esperar 5 segundos. O motivo é que, quando todos os threads começam, é uma operação simultânea e aguardará 5 segundos. Então, no geral, parece que ele esperou apenas 5 segundos. Esta é uma operação simultânea.
Resumir:
1. A diferença entre o método Execute () e o método submit () fornecido pelo ExecutService:
um. O método Execute () aceita apenas instâncias do tipo executável, para que não possa obter o valor de retorno, nem pode obter dinamicamente a situação de execução do encadeamento.
b. O método submit () aceita instâncias executáveis e chamáveis e retornará a instância futura. O método get () da instância futura pode obter o valor do retorno de execução do encadeamento e lançar exceções de execução do encadeamento. Portanto, se você deseja obter o resultado devolvido pela execução do thread e poder lidar com possíveis exceções durante a execução do thread, ou se você deseja cancelar a execução do thread no meio, você pode usar o método de envio ()
2. Através da saída, você pode ver que o método principal (encadeamento principal) termina depois que todos os threads concluíram a execução. A razão:
um. Obtenha a instância futura através do método submit () e obtenha o resultado do retorno do thread através do método get () da instância futura. O método get () da instância futura aguardará a execução do tópico antes de retornar, para que o método principal aguarde que todos os threads infantis terminem antes de terminar
b. Se o loop for marcado com vermelho acima for removido, o método principal (encadeamento principal) terminará cedo sem esperar que todos os threads infantis terminem
Reabastecer:
1. Quando vários threads são executados simultaneamente, se ocorrer uma exceção em um dos threads e não for processada, o thread interrompe automaticamente a execução, mas os outros threads ainda serão executados normalmente. É por isso que o Tomcat pode continuar prestando serviços quando ocorre uma exceção na solicitação do Tomcat.
2. Tomcat fornece uma piscina de fios e uma piscina de espera. Cada solicitação reiniciará um novo thread para processar a solicitação. Se os threads no pool de threads forem usados, ele será colocado na piscina de espera e esperará. Quando um thread é liberado novamente no pool de threads, um thread será atribuído para processar as solicitações no pool de espera.
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.