【JUC】5.스레드 풀 - Executor

5634 단어
스레드 풀을 생성하는 방법은 다음과 같습니다.
1. ThreadPoolExecutor의 구조 방법을 통해 ThreadPoolExecutor의 대상, 즉 하나의 스레드 탱크의 대상을 만든다.
이 구조 방법은 모두 7개의 매개 변수, 5개의 필수 매개 변수, 2개의 기본값을 가진 매개 변수이다.자세히 뒤에 말하기;
전송:https://www.cnblogs.com/mussessein/p/11654022.html
2. Executors를 통해 되돌아오는 스레드 탱크 대상;
이런 방법으로 만든 상용 스레드 탱크는 4가지이고ForkJoinPool 대상도 만들 수 있다.
봉인된 방법이라고 할 수 있다. Executors의 4가지 자주 사용하는 정적 방법을 통해 봉인된 ThreadPoolExecutor 스레드 탱크의 4가지 대상을 되돌려준다.
전송:https://www.cnblogs.com/mussessein/p/11654120.html
3. ForkJoinPool 동시 프레임
하나의 큰 임무를 여러 개의 작은 임무로 나누면 fork를 사용하여 작은 임무를 다른 라인에 나누어 동시에 처리할 수 있고join을 사용하면 여러 라인의 처리 결과를 총괄할 수 있다.이것은 사실상 분치 사상이다.

Executor 클래스(이 방법을 최대한 사용하지 않고 ThreadPoolExecutor 클래스를 사용합니다)


Executors에서 반환된 스레드 풀 객체의 단점은 다음과 같습니다.
FixedThreadPool 및 SingleThreadPool: 허용된 요청 대기열 길이는 Integer입니다.MAX_VALUE, 많은 요청이 쌓여서 OOM이 발생할 수 있습니다.
CachedThreadPool 및 ScheduledThreadPool: 허용되는 생성 스레드 수는 Integer입니다.MAX_VALUE 는 대량의 스레드를 생성하여 OOM을 만들 수 있습니다.
ExecutorService 객체를 반환하는 데 사용되는 경우

네 가지 방법은 모두 Executor 서비스의 실현 클래스인 ThreadPoolExecutor의 실례 대상을 되돌려주고 네 가지 다른 스레드 풀을 만든다.

public static ExecutorService newFixedThreadPool(int nThreads) {
    return new ThreadPoolExecutor(nThreads, nThreads,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue());
}

고정 스레드 생성 캐시 대기열:Linked BlockingQueue:경계 차단 대기열, 대기열 최대값은 Integer입니다.MAX_VALUE, 작업 제출 속도가 나머지 작업 처리 속도에 지속되면 대기열에 많은 장애가 발생합니다.
public static ExecutorService newCachedThreadPool() {
     return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                   60L, TimeUnit.SECONDS,
                                   new SynchronousQueue());
}

캐시 가능한 스레드 풀 생성캐시 큐: SynchronousQueue 동기화 큐
public static ExecutorService newSingleThreadExecutor() {
    return new FinalizableDelegatedExecutorService(new ThreadPoolExecutor
                                                   (1, 1,
                                                    0L, TimeUnit.MILLISECONDS,
                                                new LinkedBlockingQueue()));
}

코어 Pool Size,maximum Pool Size, 모두 1로 구성된 단일 스레드 풀을 만듭니다. 즉, 하나의 스레드만 실행됩니다.
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
    return new ScheduledThreadPoolExecutor(corePoolSize);
}

정시 및 주기적인 작업 수행을 지원하는 스레드 탱크 만들기 데모:

스레드 풀을 사용하는 일반적인 단계:


스레드 생성: Runnable 구현 클래스, Callable 구현 클래스Executors 클래스의 정적 공장 방법을 호출하여 Executor 서비스의 실례 대상을 만들고, 스레드 탱크를 성공적으로 만들었습니다 Executor Service 객체에 대한 submit 메소드 커밋 스레드 호출shutdown 방법으로 스레드 탱크를 닫습니다.
    public static void main(String[] args){
        //  6 
        ExecutorService pool= Executors.newFixedThreadPool(6);
        //  lambda Runnable 
        Runnable target=()->{
            for (int i=0;i<20;i++){
                System.out.println(Thread.currentThread().getName()+"---i :"+i);
            }
        };
        //  
        pool.submit(target);
        pool.submit(target);
        // 
        pool.shutdown();
    }

좋은 웹페이지 즐겨찾기