1 razões para introduzir pools de threads
Como o ciclo de vida de um tópico inclui a criação, pronta, corrida, bloqueio e destruição de estágios, quando o número de tarefas que pendemos é pequeno, podemos criar vários tópicos para lidar com as tarefas correspondentes, mas quando há um grande número das tarefas, a criação e destruição de tópicos requer muita sobrecarga e o uso de pools de threads aliviará muito esses problemas.
2 Uso do pool de threads
Precisamos usar apenas o método estático fornecido pela classe Executores para criar o pool de threads correspondente:
Public Static ExecutorSorsevice NewsingLethReadExecutor () Public Static ExecutorSorsevice newFixedThreadpool () public static ExecutorSorsevice NewCachedThre ADPOOL ()
O NewsingLethReadExecutor retorna um executor que contém um único thread.
NewfixedThreadpool retorna um pool de threads que contém um número especificado de threads.
O NewCachedThreadpool cria threads correspondentes com base no número de tarefas do usuário.
Só precisamos colocar a tarefa a ser executada no método de execução e entregar a classe de implementação da interface executável ao método de execução do pool de threads como um parâmetro, como mostrado abaixo:
Executor executor = executores.newsinglethreadExecutor (); executor.execute (new runnable () {public void run () {// executou tarefas}}Se você precisar passar os parâmetros para a tarefa, poderá fazê -lo criando uma classe de implementação para a interface executável.
3. Exemplo
(1): NewsingleThreadExecutor
Mythread.java
publicClassMythread estende o thread {@Override publicVoid run () {System.out.println (Thread.currentThread (). getName () + "Execution ..."); {// Crie um pool de threads que possa reutilizar o número fixo de threads executores service pool = executores. Thread Thread; Pool.Execu TE (T2); Resultado de saída
Pool-1-Thread-1 está executando. . . Pool-1-Thread-1 está executando. . . Pool-1-Thread-1 está executando. . . Pool-1-Thread-1 está executando. . . Pool-1-Thread-1 está executando. . .
(2): newfixedthreadpool
TestFixedThreadpool.java
publicClass TestfixedThreadpool {publicstaticVoid Main (String [] args) {// Crie um pool de threads que pode reutilizar o número fixo de threads executores Service Pool = executores.newfixedThreadpo OL (2); Interface runnable thread t1 = novo mythread (); o Pool Execute Pool.Execute (T1); }} Resultado de saída
Pool-1-Thread-1 está executando. . . Pool-1-Thread-2 está executando. . . Pool-1-Thread-1 está executando. . . Pool-1-Thread-2 está executando. . . Pool-1-Thread-1 está executando. . .
(3): Newcachedthreadpool
TestCachedThreadpool.java
publicClass TestCachedThreadpool {publicstaticVoid Main (String [] args) {// Crie um pool de threads que pode reutilizar o número fixo de threads executores Service Pool = executores.newcachedthread pool (); Interface runnable thread t1 = novo mythread (); Execute no pool.Execute (T1); } Resultado da saída:
Pool-1-Thread-2 está executando. . . Pool-1-Thread-4 está executando. . . Pool-1-Thread-3 está executando. . . Pool-1-Thread-1 está executando. . . Pool-1-Thread-5 está sendo executado. . .
(4): NewscheduledThreadpool
TestscheduledthreadpoolExecutor.java
publicClass testscheduledthreadpoolExecutor {publicstaticVoid Main (String [] args) {ScheduledThreadPoolExecutor Exec = new ScheduledThThreadPoolExExEn TOR (1); LOGUE NOVA RUNDOMEFCECPEIRO (); =================================================== =========== Runna ble () {// Imprima o tempo do sistema de vez em quando, provando que os dois não têm influência um no outro @Override PublicVoid run () {System.out.println (System.nanotime ()); Resultado de saída
=================================================== =================================================== =================================================== =================================================== =================================================== =====