java ThreadPoolExecutor 사용법 간략 소개

java  ThreadPoolExecutor
선언:
프로젝트에서 문자를 보내는 기능을 사용하면 문자를 보내는 동작을 비동기적으로 만들 수 있다. 대부분의 경우 문자를 보내는 데 성공하거나 실패하면 메인 프로세스에 영향을 주지 않기 때문이다.물론 MQ 메시지를 보내는 등의 조작도 비동기식으로 봉인할 수 있다.
기본 New Thread 사용
만약 조작이 비동기화되고 싶다면, newthread를 직접 사용하고run 방법에서 업무 조작을 실현하면 된다.예:

 new Thread(new Runnable() {
    public void run() {
      // 、 MQ 
    }
 });
그러나 이런 방식은 몇 가지 단점이 있다.
1. 매번 new 라인을 실행한 후 폐기하고 다시 사용할 수 없습니다.
2. 시스템의 합병량이 마침 비교적 크고 대량의 라인이 필요하다면 이런 매번 new의 방식은 자원을 빼앗을 것이다.
ThreadPoolExecutor
우리는 jdk1.5의 ThreadPoolExecutor를 사용하여 비동기식 작업을 봉인할 수 있습니다.ThreadPoolExecutor의 장점은 스레드 복용을 할 수 있고 가능한 한 적은 스레드를 사용하여 더 많은 작업을 수행할 수 있다는 것이다. 효율과 성능이 상당히 좋다.데모 코드는 다음과 같습니다.

public class ThreadPool {
  private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(8, 12, 30,
      TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(50000), new ThreadPoolExecutor.AbortPolicy());

  public static ThreadPoolExecutor getThreadPool() {
    return threadPool;
  }
}

매개 변수 소개

public ThreadPoolExecutor(int corePoolSize,
               int maximumPoolSize,
               long keepAliveTime,
               TimeUnit unit,
               BlockingQueue<Runnable> workQueue,
               RejectedExecutionHandler handler) {

 }

corePoolSize:workQueue 대기열의 요소가 최대치에 도달하지 않았을 때 corePoolSize는 풀의 스레드 수량의 최대치를 나타냅니다.
maximumPoolSize: 스레드 풀에 허용되는 최대 스레드 수;
keepalive Time: 현재 풀의 스레드 수가 corePoolSize를 초과하면 그 스레드를 초과하면 너무 오래 비우면 삭제해야 합니다.keep Alive Time은 이러한 라인의 최대 유휴 시간입니다.
유닛: keep Alive Time의 시간 단위;
workQueue: 풀의 스레드 수가 코어PoolSize에 도달하면 요청이 계속 오면 요청에 대응하는task를 대기열에 넣습니다.
handler:workQueue가 가득 차면 풀의 스레드가 maximumPoolSize에 도달합니다. 이때 자원 처리 요청이 없습니다. Rejected ExecutionHandler가 처리해야 합니다.처리를 거부하거나 임무를 버리는 등.
실행 과정
요청이 없을 때, 스레드 탱크에 아무런 스레드가 없습니다.
요청이 있을 때 라인을 만듭니다. 풀에 있는 라인 수는corePoolSize와 같습니다.
요청이 너무 많아서 더 많은 스레드가 필요하면,ThreadPoolExecutor는 요청을 대기열에 넣고 당분간 새 스레드를 만들지 않습니다.
workQueue가 가득 차면,ThreadPoolExecutor는 최대 PoolSize와 같을 때까지 라인을 계속 만듭니다.
라인 수가 maximumPool Size에 도달했고 workQueue도 느려서 요청을 Rejected Execution Handler에 잃어버려서 처리할 수 밖에 없습니다.
비고
ThreadPoolExecutor를 사용할 때는 자신의 업무 상황에 따라 적당한 매개 변수 값의 크기를 지정해야 합니다.
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기