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 에 계속 관심 을 가 질 수 있 습 니 다.호 안 드 로 이 드 개발 노트 도 우미/댓 글 좋아요!당신 의 격려 는 내 가 글 을 쓰 는 가장 큰 동력 이기 때 문 입 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.