스레드 풀을 사용 SpringBoot

스레드 풀의 일상적인 사용 :

메시지 클래스, 스레드 풀을 호출

코드를 복사
{클래스 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); 
    } 
}
코드를 복사

 

추천

출처www.cnblogs.com/ZenoLiang/p/12624030.html