스레드 풀의 일상적인 사용 :
메시지 클래스, 스레드 풀을 호출
{클래스 MessageClientSendMsg 공개 / ** * 로거 * / 개인 로그 LOGGER = 새 새 정적 최종 로그 (MessageClientSendMsg.class); / ** * 스레드 풀 * / 개인 정적 ExecutorService를 ThreadPool이; / ** * 추적 * / 개인 문자열 추적 ; / ** * 전화 번호 * / 개인 문자열 cellNum; / ** * 메시지 엔티티 * / 개인 messageProducerReq의 messageProducerReq; 정적 { ThreadPool이 Executors.newFixedThreadPool = (10), 고정 나사 풀 // 수 } / ** * 구성 기능 * 파라미터 : 추적 요청 물 파라미터 : cellNum 전화 번호 파라미터 : messageProducerReq 엔티티 메시지 * / 공용 MessageClientSendMsg (추적 문자열, 문자열 cellNum, MessageProducerReq messageProducerReq)는 { this.trace가 추적 =; this.cellNum = cellNum; this.messageProducerReq = messageProducerReq ; } / ** * 메시지 * / 공공 무효 SENDMSG () { sendMsgRunable sendMsgRunable 새로운 새로운 sendMsgRunable = (); threadPool.execute (sendMsgRunable); } / ** *이 메시지를 처리하는 클래스와 내부의 이상을 전송하지 메인 스레드의 사업에 영향을 미칠 @Override를 * / 클래스 SendMsgRunable 구현의 Runnable는 { 공공 무효 실행 () { 시도는 { MessageClientProducer msgClintProducer)은 (새 MessageClientProducer을 =; msgClintProducer.sendAsyncWithPartition (추적, cellNum, messageProducerReq); } 캐치 (예외 전자) { LOGGER.error ( "消息发送失败, 추적!"+ 추적); } } } }
@EnableAsync 주석 및 메모를 사용하여 스레드 풀을 사용 SpringBoot @Async
스레드 풀 구성 :
java.util.concurrent.ThreadPoolExecutor 오기; @Configuration @EnableAsync Public 클래스 BeanConfig { @Bean 된 TaskExecutor, TaskExecutor를 (공공)을 { 위한 ThreadPoolTaskExecutor을위한 ThreadPoolTaskExecutor된다 실행자 새로운 새 = ()이고; // 세트 코어 스레드 수 executor.setCorePoolSize (5.); // 설정된 최대 스레드 executor.setMaxPoolSize (10); // 큐 용량 설정 executor.setQueueCapacity (20 임); // 세트 활성 스레드 시간 (초) executor.setKeepAliveSeconds (60); // 설정된 기본 스레드 이름 executor.setThreadNamePrefix ( "안녕하세요 - "); // 세트는 거부 정책 executor.setRejectedExecutionHandler (새 새 ThreadPoolExecutor.CallerRunsPolicy ()); 스레드 풀의 종료 후 가까운 모든 작업에 대한 // 대기 executor.setWaitForTasksToCompleteOnShutdown (참으로) 복귀 집행자; } }
동시 작업 :
수입 org.springframework.scheduling.annotation.Async; 수입 org.springframework.stereotype.Component; 수입 java.text.SimpleDateFormat에; 수입 java.util.Date; @Component 공용 클래스 테스트 { @Async 공개 무효 시험 (Ⅰ INT) { SimpleDateFormat의 형식 = SimpleDateFormat의 새로운 ( "HH : MM : SS"); {시도 에 Thread.sleep (10000); 에서 System.out.println ( "多线程异步执行"+ 난 + ""+는 Thread.currentThread () getName () +. ""+ format.format (새 Date ())); } 캐치 (예외 : InterruptedException 전자) { e.printStackTrace (); } } }
컨트롤러 레이어에서 사용
( "/ 테스트") @GetMapping @ResponseBody 공개 무효 시험 () { 위한은 (INT는 I = 0; I <100; I ++) { test.test (I); } }