IDEA 가져 오기 프로토콜은 코드를 작성할 때, 자동으로 빨간 선을 정렬하고 당신을 생각 나게하는, 알리를 연결합니다.
수동으로 스레드 풀을 만들 텔, 효과는 더 좋을 것이다.
퀘스트 이유 전에 우리는 먼저 스레드 풀 ThreadPoolExecutor입니다 매개 변수와 그 의미가 무엇인지 살펴 봅니다.
ThreadPoolExecutor입니다 생성자 :
공용 가능한 ThreadPoolExecutor (INT corePoolSize를,
INT maximumPoolSize를,
긴 KeepaliveTime은,
TimeUnit와 유닛
의 BlockingQueue <Runnable를> Workqueue는, ThreadFactory를 ThreadFactory를, RejectedExecutionHandler 핸들러) { // 코드 ... }
매개 변수를 의미 :
1.corePoolSize 스레드 풀의 스레드 수를 지정, 핵심 스레드 풀 크기
2.maximumPoolSize은의 스레드 풀에서 스레드의 최대 개수를 지정
스레드 풀 스레드의 수는 얼마나 의지 corePoolSize를 시간, 여분의 유휴 스레드,보다 큰 3.keepAliveTime을 그것은 파괴된다.
4.unit 시간 단위
제출 기억하지만 작업이 실행되지 않은 태스크를위한 5.workQueue 큐.
6.threadFactory 스레드 공장은 일반적으로 기본값을 사용하여 스레드를 생성하는 데 사용
정책, 너무 많은 작업 방법과 작업을 거부하는 거부 7.handler. maximumPoolSize를 +이 Workqueue 및 RejectedExecutionHandler 다루는 작업의 크기를 작업의 수를 초과 제출할 때
필수 수동으로 이러한 매개 변수를 스레드 풀을 만들고, 왜 알리 법령 이유. 왜 허용하지 특정 법령 그렇게 말한다 :
실행자 스레드 풀을 만들 수 있지만, ThreadPoolExecutor입니다 방법으로,이 방법은 학생들이 자원 고갈의 위험을 방지하기 위해, 더 명시 적으로 운영 규칙 스레드 풀을 작성할 수 없습니다.
설명 : 각 메소드 실행자의 단점 :
1) 인 newFixedThreadPool 및 newSingleThreadExecutor :
주된 문제는 매우 큰 메모리에도 OOM 소모 할 수 요청 처리 큐의 축적이다.
2) newCachedThreadPool 및 인 newScheduledThreadPool는 :
가장 큰 문제는 스레드 매우 많은 수의도 움을 만들 수 있습니다, 스레드의 최대 수에 Integer.MAX_VALUE입니다.
이 두 가지 단점이 발생하는 방법을 봐.
는 Integer.MAX_VALUE 스레드의 블로킹 큐의 크기를 만들 많은 수의 요청을 축적 할 수, 메모리를 많이 소모, 심지어 OOM으로 이어질 때문에 첫 번째입니다.
두 번째는 스레드 풀을 만들 수있는 스레드의 최대 수에 Integer.MAX_VALUE를 허용하기 때문에, 스레드, 자원의 소비의 큰 숫자를 만들고, 심지어 OOM으로 이어질 수있다.
모두 약간 극단적, 소스 코드에 볼 수있는 작은 점을 볼 수 있습니다.
알리 법령 옹호 수동으로 부여하는 대신 Java 스레드 풀에 건설되고, 예를 들어, 스레드 풀을 만들 :
성신 1 :
// org.apache.commons.lang3.concurrent.BasicThreadFactory ScheduledExecutorService를 ExecutorService를 = 신규 로 스케줄 (1 , 새로운 BasicThreadFactory.Builder (). namingPattern ( "예 스케줄 - 수영장 - %의 D"). 데몬 ( 참 ) .build () );
성신 2 :
ThreadFactory를 namedThreadFactory = 새로운 ThreadFactoryBuilder () setNameFormat. ( "데모 수영장 - %의 D" ) .build (); // 공통점 풀 ExecutorService를 풀 = 새로운 ThreadPoolExecutor에 (5, 200 , 0L , TimeUnit.MILLISECONDS, 새로운 <Runnable를> LinkedBlockingQueue 등 (1024), namedThreadFactory, 새로운 ThreadPoolExecutor.AbortPolicy ()); pool.execute (() -> 에서 System.out.println (는 Thread.currentThread () getName ()).); pool.shutdown (); // 정상적으로 종료
성신 3 :
<빈 ID = "userThreadPool 「 클래스 ="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor "> <속성 명 ="corePoolSize를 "값 ="10 "/> <속성 명 ="maxPoolSize 「값 = "100"/> < 속성 이름 = "queueCapacity"값 = "2000"/> <속성 이름 = "ThreadFactory를"값 = ThreadFactory를 /> <속성 이름 = "rejectedExecutionHandler"> <REF 지역 = "rejectedExecutionHandler"/> </ 부동산> </ 콩> // 코드에서 userThreadPool.execute (스레드);
---
있는 공개 문제, 프로그래밍 애비뉴는 "수동"알리 자바 개발 설명서의 최신 버전을 응답하지 않습니다.