이 기사는 스프링 스레드 풀 스레드 스레드 Pooltaskexecutor의 구성을 소개하고 다음과 같이 공유합니다.
1. ThreadPooltaskexecutor 구성
<!-스프링 스레드 풀 executor--> <bean id = "taskexecutor"> <!-스레드 풀에서 유지 관리하는 최소 스레드 수-> <속성 이름 = "CorePoolsize"value = "5" /> <!-허용 유휴 시간-> <속성 이름 = "keepaliveseconds"value = "200" /> <!-스레드의 최대 숫자가 유지됩니다. /> <!-캐시 큐-> <속성 이름 = "QueueCapacity"value = "20" /> <!-작업 거부를위한 정책-> <속성 이름 = "RejectedExecutionHandler"> <bean /> < /bean>
속성 필드 설명
CorePoolSize : 스레드 풀에서 유지 관리되는 최소 스레드 수
keepaliveseconds : 허용 여가 시간
MaxPoolsize : 스레드 풀에서 유지 관리되는 최대 스레드 수
queuecapacity : 캐시 큐
거부 집회 핸들러 : 작업 거부 전략 처리
2. 실행 (실행 가능) 메소드 실행 프로세스
이 시점에서 스레드 풀의 수가 CorePoolSize보다 작 으면 스레드 풀의 스레드가 모두 유휴 상태이더라도 추가 작업을 처리하기 위해 새 스레드를 작성해야합니다.
스레드 풀의 숫자가 CorePoolSize와 같지만 버퍼 큐 Workqueue가 가득 차 있지 않으면 작업이 버퍼 큐에 배치됩니다.
이 시점에서 스레드 풀의 수가 CorePoolSize보다 크면 버퍼 큐 Workqueue가 가득 차고 스레드 풀의 수가 MaxPoolSize보다 적으므로 추가 작업을 처리 할 새 스레드를 만듭니다.
스레드 풀의 숫자가 현재 CorePoolSize보다 크면 버퍼 큐 Workqueue가 가득 차고 스레드 풀의 숫자는 MaxPoolSize와 같으면이 작업은 처리기가 지정한 정책을 통해 처리됩니다. 즉, 처리 작업의 우선 순위는 다음과 같습니다. Core Thread CorePoolsize, 작업 대기열 Workqueue, 최대 스레드 MaxImumpoolsize입니다. 세 가지가 모두 가득 찬 경우 처리기를 사용하여 거부 된 작업을 처리하십시오.
스레드 풀의 스레드 수가 CorePoolSize보다 큰 경우, 스레드가 KeepAlivetime보다 유휴 상태 인 경우 스레드가 종료됩니다. 이런 식으로 스레드 풀은 풀의 스레드 수를 동적으로 조정할 수 있습니다.
3. 샘플 코드
주니 테스트
@RunWith (SpringJunit4classRunner.class) @ContextConfiguration (classes = {multithreadconfig.class}) public class multithreadtest {@autowired private strook pooltaskexecutor taskexecutor; @autowired private multithreadprocessservice multithreadprocessservice; @test public void test () {int n = 20; for (int i = 0; i <n; i ++) {taskexecutor.execute (new multithreaddemo (multithreadprocessservice)); System.out.println ( "int I is" + i + ", 이제 ThreadPool 활성 스레드 TotalNum은" + taskexecutor.getActiveCount ()); } try {system.in.read (); } catch (ioexception e) {throw new runtimeexception (e); }}}멀티 스레드 데모
/** * 멀티 스레드 동시 처리 데모 * @Author Daniel.zhao */public class multithreaddemo implements runnable {private multithreadprocessservice multithreadprocessservice; public multithreaddemo () {} public multithreaddemo (multithreadprocessservice multithreadprocessservice) {this.multithreadprocessservice = multithreadprocessservice; } @override public void run () {multithreadprocessservice.processsomething (); }}MultithreadProcessService
@ServicePublic 클래스 MultithreadProcessService {public static final logger logger = logger.getLogger (multithreadProcessService.class); / ** * 기본 처리 프로세스는 1000ms */ public void processsomething () {logger.debug ( "multithreadProcessService-processSomething" + thread.currentThread () + "...... start"); try {thread.sleep (1000); } catch (InterruptedException e) {throw new runtimeexception (e); } logger.debug ( "multithreadprocessservice-processsomething" + thread.currentthread () + "...... end"); }}multithreadconfig
@configuration @componentscan (basepackages = { "com.xxx.multithread"}) @importresource (value = { "classpath : config/application-task.xml"}) @enablescheduling public class multithreadconfig {}위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.