Este artigo apresenta a configuração do thread de threads da primavera ThreadPooltaskexecutor e o compartilha com você, como segue:
1. Configuração do ThreadPooltaskexecutor
<!-Executor do pool de threads de primavera-> <bean id = "taskexecutor"> <!-Número mínimo de threads mantidos pelo pool de threads-> <propriedade name = "CorePoolSize" value = "5" /> <!-tempo inativo permitido-> <nome da propriedade = "KeepAliveSeconds" Value = "200" /> <!-máximo de shreads " Value = "10" /> <!-Cache Fila-> <Propriedade name = "Queuecapacidade" value = "20" /> <!-Política de manuseio para rejeitar tarefas-> <Nome da propriedade "RejejeexecutionHandler"> <bean /> </sipers> </siean>
Descrição do campo de atributo
CorePoolSize: o número mínimo de threads mantidos pelo pool de threads
KeepaliveSeconds: Permitido tempo livre
Maxpoolsize: o número máximo de threads mantidos pelo pool de threads
Queuecapacidade: fila de cache
RejeitEdExecutionHandler: Strategy de manuseio para rejeitar a tarefa
2. Processo de execução do método Execute (Runable)
Se o número de pools de threads for menor que o CorePoolSize no momento, mesmo que os threads no pool de threads estejam todos ociosos, um novo thread deverá ser criado para lidar com as tarefas adicionadas.
Se o número no pool de threads for igual ao CorePoolSize, mas a fila de buffer não estiver cheia, a tarefa será colocada na fila do buffer.
Se o número de pools de threads for maior que o CorePoolSize no momento, a câmara de trabalho da fila de buffer estará cheia e o número de pools de threads é menor que o MaxPoolSize, crie um novo thread para lidar com as tarefas adicionadas.
Se o número no pool de threads for maior que o CorePoolSize no momento, a câmara de trabalho da fila de buffer estará cheia e o número no pool de threads é igual ao MaxPoolSize, essa tarefa será tratada pela política especificada pelo manipulador. Ou seja, a prioridade do manuseio das tarefas é: Thread CorePoolSize, fila de tarefas, fila de trabalho, thread máximo máximo MaximumPoolSize. Se todos os três estiverem cheios, use o manipulador para lidar com a tarefa rejeitada.
Quando o número de encadeamentos no pool de threads é maior que o CorePoolSize, se um encadeamento estiver ocioso por mais do que KeepAliveTime, o thread será encerrado. Dessa forma, o pool de threads pode ajustar dinamicamente o número de threads no pool.
3. Código de amostra
Teste Junit
@Runwith (springjunit4classrunner.class) @ContextConfiguration (classes = {multithreadConfig.class}) classe pública multithreadTest {@aUTowired Private ThreadPooltaskexecutor Taskexecutor; @Autowired Private MultithreadProcessService multithreadProcessService; @Test public void test () {int n = 20; para (int i = 0; i <n; i ++) {taskexecutor.execute (novo multithreadDemo (multithreadprocessservice)); System.out.println ("int i é" + i + ", agora threadpool threads ativos totalnum é" + taskexecutor.getActiveCount ()); } tente {System.in.read (); } catch (ioexception e) {lança nova runtimeException (e); }}}MultithreadDemo
/** * Demoção de processamento concorrente multithread * @author daniel.zhao * */classe pública multithreaddemo implementa Runnable {private multithreadProcessService multithreadProcessService; public MultithReadDemo () {} public multithreadDemo (multithreadProcessService multithreadProcessService) {this.multithreadProcessService = multithreadProcessService; } @Override public void run () {multithreadprocessservice.processsomething (); }}MultithreadProcessService
@ServicePublic Class multithreadProcessService {public static final Logger Logger = Logger.getLogger (MultithreadProcessService.class); / ** * O processo de processamento padrão leva 1000ms */ public void ProcessSomething () {Logger.debug ("MultithreadProcessService-ProcessSomething" + Thread.CurrentThread () + "...... Start"); tente {thread.sleep (1000); } catch (interruptedException e) {lança a nova RunTimeException (e); } logger.debug ("MultithreadProcessService-ProcessSomething" + Thread.currentThread () + "...... end"); }}MultithreadConfig
@Configuration @ComponentsCan (BasEpackages = {"com.xxx.multithread"}) @importresource (value = {"classPath: config/application-task.xml"}) @enablescheduling classe pública MultithReadConfig {}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.