Spring Boot 는 Spring 의 비동기 스 레 드 풀 을 사용 하여 이 루어 집 니 다.

머리말
스 레 드 탱크 는 이름 으로 볼 때 스 레 드 를 저장 하 는'연못'입 니 다.모든 일이 일리 가 있 습 니 다.그 스 레 드 탱크 의 장점 은 어디 에 있 습 니까?
우 리 는 컴퓨터 로 하여 금 우 리 를 위해 일 을 하 게 해 야 한다.사실은 모두 스 레 드 를 사용 하고 있다.사용 방법 은 newRunnable인터페이스 나 새로운 하위 클래스 이다.Thread류 에 계승 하면 스 레 드 대상 의 생 성과 소각 과 관련 될 것 이다.이 두 가지 조작 은 우리 시스템 프로세서 자원 을 소모 하 는 것 임 에 틀림없다.그러면 어떻게 이 문 제 를 해결 할 것 인가?스 레 드 탱크 는 사실 이 문 제 를 해결 하기 위해 생 긴 것 이다.
스 레 드 탱크 는 시스템 성능 과 큰 사용자 의 요청 간 의 모순 을 처리 하 는 방법 을 제공 합 니 다.여러 작업 에 이미 존재 하 는 스 레 드 대상 을 통 해 스 레 드 대상 에 대한 생 성 과 소각 비용 을 낮 출 수 있 습 니 다.고객 이 요청 할 때 스 레 드 대상 은 요청 한 응답 시간 을 향상 시 켜 시스템 서비스의 표현 을 전체적으로 향상 시 킬 수 있 습 니 다.
이 블 로 그 는 Spring 에서 비동기 스 레 드 풀 을 어떻게 사용 하 는 지 정리 하고 예 를 들 어 비동기 라 는 개념 을 체험 해 보 는 것 입 니 다.
실습생 왕 군 은 백 스테이지 관리 시스템 의 보고서 분석 을 책임 진다.그의 업 무 는 백 스테이지 시스템 을 운영 하고 버튼 을 누 르 면 데이터 보고 서 를 작성 하 는 것 이다.보고 서 를 볼 필요 가 없다.데이터 양 이 많 기 때문에 보고 서 를 작성 하 는 데 시간 이 오래 걸 리 지만 보고서 와 다른 작업 이 한 라인 에 있 으 면 왕 군 은 다른 일 을 할 수 없다.그래서 보고서 생 성 이라는 임 무 를 컴퓨터 의 다른 스 레 드 에 맡 겨 야 한다.이것 이 바로 비동기 적 인 표현 이다.
Spring 에서 비동기 스 레 드 풀 을 사용 합 니 다.
spring 에서AsyncConfigurer이 설정 인 터 페 이 스 를 제공 하여 우리 가 자신의 비동기 스 레 드 풀 을 설정 하 는 데 편리 합 니 다.
새 비동기 설정 클래스
나 는 config 패 키 지 를 새로 만 든 후에 일부 구성 요소 의 설정 류 를 모두 안에 넣 는 것 에 습관 이 되 었 다.

package com.example.wyh.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.Executor;

/**
 * @author      !!!
 */
@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {
  @Override
  public Executor getAsyncExecutor() {
    //     
    ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
    //       
    threadPoolTaskExecutor.setCorePoolSize(10);
    //          
    threadPoolTaskExecutor.setMaxPoolSize(30);
    //           
    threadPoolTaskExecutor.setQueueCapacity(2000);
    //      
    threadPoolTaskExecutor.initialize();

    return threadPoolTaskExecutor;
  }
}
위의 코드 에서,우 리 는@Configurationspring 에 게 이것 은 설정 클래스 라 고 알려 주 었 습 니 다.주해@EnableAsync를 사용 하여 spring 을 비동기 로 사용 할 수 있 도록 합 니 다.이렇게 한 후에 어떤 방법 중의 임 무 를 다른 스 레 드 에 비동기 적 으로 놓 으 려 면 방법 에@Async주 해 를 더 하면 된다.
서비스 인 터 페 이 스 를 새로 만 들 고 구현 합 니 다.

package com.example.wyh.Service;

/**
 * @author      !!!
 */
public interface AsyncService {

  /**
   *               
   */
  public void useAsyncThreadWork();
  
}

package com.example.wyh.Service;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

/**
 * @author      !!!
 */
@Service
public class AsyncServiceImp implements AsyncService{

  @Override
  @Async
  public void useAsyncThreadWork() {
    System.out.println(Thread.currentThread().getName());

  }
}
인터페이스의 구체 적 인 실현 에서 우 리 는 현재 스 레 드 의 이름 을 인쇄 하여 마음의 스 레 드 에서 이 작업 을 수행 하 는 지 확인 합 니 다.또한@Service주 해 를 통 해 spring 은 서비스 유형의 bean 이 라 고 알려 줍 니 다.그러면 우 리 는 spring 이 자신의 용 기 를 통 해 우리 의 대상 을 관리 할 수 있 습 니 다.이것 이 바로IOC특성의 표현 입 니 다.
컨트롤 러 를 새로 만들어 서 접근,테스트 를 진행 합 니 다.

/**
 * @author      !!!
 */
@RestController
public class AsyncController {

  @Autowired
  AsyncService asyncService;
  @GetMapping("/testAsync")
  public String testAsync()
  {
    System.out.println(Thread.currentThread().getName());
    asyncService.useAsyncThreadWork();
    return "testAsync      ...";
  }
}
이 를 통 해 알 수 있 듯 이 상기 코드 에서 우 리 는@Autowired주 해 를 사용 하여 방금 Spring 용기 관리 에 맡 긴Service실현 대상 을 자동 으로 조립 했다.이것 은 spring 의DI특성 표현 이다.
내 가 연 것 은 8090 포트 이기 때문에,내 가 방문 한 것 은 8090 포트 이다.

두 스 레 드 의 이름 을 인쇄 한 것 을 볼 수 있 습 니 다.첫 번 째 는 Controller 에서 실 행 된 스 레 드 이름 입 니 다.두 번 째 는 spring 이 방금 설정 한 스 레 드 풀 에서 추출 한 스 레 드 를 통 해 해당 하 는 작업 을 수행 하 는 것 입 니 다.

총결산
이 블 로 그 는 spring 에서 스 레 드 탱크 를 사용 하여 비동기 적 으로 임 무 를 수행 하 는 기본 적 인 방법 을 소개 하여 프로젝트 에서 비동기 스 레 드 탱크 를 사용 하 는 데 예 를 들 어 보 였 다.
Spring Boot 가 Spring 을 사용 하 는 비동기 스 레 드 풀 의 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Spring Boot 비동기 스 레 드 풀 내용 은 우리 의 이전 글 이나 아래 의 관련 글 을 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기