Android 다 중 스 레 드 탱크 ThreadPool 의 원리 와 사용 을 완전히 분석 합 니 다.

6530 단어 AndroidThreadPool
앞에서 말 한 것 은 다 선정 에 대해 모두 가 잘 알 것 이다.그런데 스 레 드 탱크 에 대해 서 아 세 요?오늘 나 는 모두 에 게 스 레 드 탱크 에 관 한 모든 지식 을 배 울 것 이다.
목차
示意图
1.프로필
示意图
2.작업 원리
2.1 핵심 매개 변수 스 레 드 탱크 에 6 개의 핵심 매개 변수 가 있 는데 구체 적 으로 다음 과 같다.
示意图
상기 6 개의 매개 변수 설정 은 스 레 드 탱크 의 기능 을 결정 합 니 다.구체 적 인 설정 시기=스 레 드 탱크 류 대상 을 만 들 때 들 어 옵 니 다.
ThreadPoolExecutor 클래스=스 레 드 탱크 의 진정한 실현 클래스
개발 자 는 서로 다른 수요 에 따라 핵심 파 라 메 터 를 설정 하여 사용자 정의 스 레 드 탱크 를 실현 할 수 있 습 니 다.

//          
//               
  Executor executor = new ThreadPoolExecutor( 
                       CORE_POOL_SIZE,
                       MAXIMUM_POOL_SIZE,
                       KEEP_ALIVE,
                       TimeUnit.SECONDS, 
                       sPoolWorkQueue,
                       sThreadFactory 
                        );

//         
  public ThreadPoolExecutor (int corePoolSize,
                int maximumPoolSize,
                long keepAliveTime,
                TimeUnit unit,
                BlockingQueue<Runnable workQueue>,
                ThreadFactory threadFactory )
주:자바 에 자주 사용 하 는 스 레 드 탱크 4 가지 가 내장 되 어 있 습 니 다.(즉,핵심 매개 변 수 를 설정 하 였 습 니 다)자세 한 설명 은 다음 과 같 습 니 다.
2.2 내부 원리 논리
스 레 드 탱크 가 실 행 될 때 다음 과 같은 작업 논 리 를 따른다.
示意图
3.사용 절차
스 레 드 탱크 의 사용 절 차 는 다음 과 같다.

// 1.      
  //    ,          ,            
  Executor threadPool = new ThreadPoolExecutor(
                       CORE_POOL_SIZE,
                       MAXIMUM_POOL_SIZE,
                       KEEP_ALIVE,
                       TimeUnit.SECONDS,
                       sPoolWorkQueue,
                       sThreadFactory
                       );
  //  : Java ,   4      ,       

// 2.         :execute()
  //   :   Runnable  
    threadPool.execute(new Runnable() {
      @Override
      public void run() {
        ... //       
      }
    });

// 3.      shutdown() 
 threadPool.shutdown();

 //        
 // a.              
 // b.        interrupt()    ( :                 )

 //     shutdownNow()    :threadPool.shutdownNow()
 //     :
 // shutdown:            SHUTDOWN,                 
 // shutdownNow:            STOP,                     ,            
 //     :    shutdown()     ;          ,   shutdownNow()
4.흔히 볼 수 있 는 4 가지 기능 스 레 드 탱크
매개 변수 에 따라 자바 에서 가장 흔히 볼 수 있 는 스 레 드 탱크 는 4 가지 가 있 습 니 다.
고정 라인 풀(FixedThreadPool)정시 스 레 드 풀(ScheduledThreadPool)캐 시 스 레 드 풀(CachedThreadPool)단일 라인 스 레 드 풀(Single ThreadExecutor)
즉,상기 4 가지 스 레 드 탱크 에 대해 자바 는 응용 장면 에 따라 핵심 파 라 메 터 를 설정 했다.
4.1 고정 라인 풀(Fixed ThreadPool)특징:핵심 라인&회수 되 지 않 음,라인 수량 고정,작업 대기 열 크기 제한 없 음(초 과 된 라인 작업 은 대기 열 에서 기다 림)응용 장면:제어 라인 최대 병발 수 구체 적 으로 사용:Executors.newFixed ThreadPool()을 통 해 예 시 를 만 듭 니 다.

// 1.           &             3
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);

// 2.    Runnable      &       
Runnable task =new Runnable(){
 public void run(){
  System.out.println("     ");
   }
  };

// 3.         :execute()
fixedThreadPool.execute(task);

// 4.      
fixedThreadPool.shutdown();
4.2 정시 스 레 드 풀(ScheduledThreadPool)특징:핵심 스 레 드 수량 고정,비 핵심 스 레 드 수량 무제 한(유 휴 시 즉시 회수)응용 장면:정시/주기 적 작업 수행 사용:Executors.newScheduledThreadPool()을 통 해 예제 생 성:

// 1.            &             5
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);

// 2.    Runnable      &       
Runnable task =new Runnable(){
    public void run(){
       System.out.println("     ");
     }
  };
// 3.         :schedule()
scheduledThreadPool.schedule(task, 1, TimeUnit.SECONDS); //   1s     
scheduledThreadPool.scheduleAtFixedRate(task,10,1000,TimeUnit.MILLISECONDS);//   10ms 、  1000ms    

// 4.      
scheduledThreadPool.shutdown();
4.3 캐 시 가능 스 레 드 풀(CachedThreadPool)특징:비 핵심 스 레 드,스 레 드 수량 만 고정 되 지 않 음(무한대 가능),남 은 스 레 드 를 유연 하 게 회수 할 수 있 음(시간 초과 체 제 를 갖 추고 있 으 며,모두 회수 할 때 시스템 자원 을 거의 차지 하지 않 음),새 스 레 드(스 레 드 없 이 사용 가능 할 때)
모든 스 레 드 작업 이 도착 하면 즉시 실 행 됩 니 다.기다 릴 필요 가 없습니다.
응용 장면:대량의 스 레 드 작업 을 수행 합 니 다.사용:Executors.newCachedThreadPool()을 통 해 예제 만 들 기:

// 1.           
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

// 2.    Runnable      &       
Runnable task =new Runnable(){
 public void run(){
    System.out.println("     ");
      }
  };

// 3.         :execute()
cachedThreadPool.execute(task);

// 4.      
cachedThreadPool.shutdown();

//                  
//               ,         。
4.4 단일 라인 스 레 드 풀(Single ThreadExecutor)
특징:하나의 핵심 스 레 드 만 있 습 니 다.(모든 작업 이 지정 한 순서에 따라 한 스 레 드 에서 실 행 될 수 있 도록 합 니 다.스 레 드 동기 화 문 제 를 처리 할 필요 가 없습니다)
응용 장면:동시 다발 에 적합 하지 않 지만 IO 차단 성과 UI 스 레 드 응답 에 영향 을 줄 수 있 는 작업,예 를 들 어 데이터 베이스 작업,파일 작업 등
사용:Executors.newSingleThreadExecutor()를 통 해 예제 만 들 기:

// 1.          
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();

// 2.    Runnable      &       
Runnable task =new Runnable(){
 public void run(){
    System.out.println("     ");
      }
  };

// 3.         :execute()
singleThreadExecutor.execute(task);

// 4.      
singleThreadExecutor.shutdown();
4.5 흔히 볼 수 있 는 스 레 드 풀 정리&비교
示意图
5.본 고 를 정리 하고 읽 은 후에 스 레 드 탱크&용법 을 잘 알 고 있다 고 믿 습 니 다.그 다음 에 저 는 안 드 로 이 드 개발 에서 다 중 스 레 드 에 관 한 지식 을 계속 설명 하 겠 습 니 다.구체 적 으로 Thread 류,Handler,HandlerThread 등 을 포함 하고 관심 이 있 으 면 Carson 에 계속 관심 을 가 질 수 있 습 니 다.호 안 드 로 이 드 개발 노트 도 우미/댓 글 좋아요!당신 의 격려 는 내 가 글 을 쓰 는 가장 큰 동력 이기 때 문 입 니 다!

좋은 웹페이지 즐겨찾기