흑마 프로그램--java 스레드 탱크

3852 단어 java 스레드 풀
------------------------------------------- android 교육당신과 교류하기를 기대합니다  -------------------------------------
 
하나의 스레드 탱크를 배치하는 것은 비교적 복잡하다. 특히 스레드 탱크의 원리에 대해 잘 알지 못하는 상황에서 설정할 수 있는 스레드 탱크가 비교적 좋지 않기 때문에Executors류에 정적 공장을 제공하여 자주 사용하는 스레드 탱크를 생성한다.
4
  • newSingleThreadExecutor: 단일 스레드의 스레드 풀을 만듭니다.이 스레드 탱크는 단지 하나의 스레드만 작동하고 있으며, 즉 단일 스레드가 모든 임무를 직렬로 수행하는 것과 같다.만약 이 유일한 라인이 이상하게 끝났다면, 새로운 라인이 그것을 대체할 것이다.이 스레드 풀은 모든 임무의 집행 순서를 임무의 제출 순서에 따라 집행할 것을 보장합니다

  • 4
  • newFixedThreadPool: 고정된 크기의 스레드 풀을 만듭니다.작업이 제출될 때마다 연못의 최대 크기에 도달할 때까지 라인을 만듭니다.스레드 탱크의 크기가 최대치에 도달하면 변하지 않습니다. 만약 어떤 스레드가 실행 이상으로 끝나면 스레드 탱크는 새로운 스레드를 보충합니다

  • 4
  • newCachedThreadPool: 캐시 가능한 스레드 풀을 만듭니다.만약 스레드 탱크의 크기가 작업 처리에 필요한 스레드를 초과하면 일부 빈 스레드(60초 동안 작업을 수행하지 않음)의 스레드를 회수하고 작업 수가 증가할 때 이 스레드 탱크는 스마트하게 새로운 스레드를 추가하여 작업을 처리할 수 있다.이 스레드 풀은 스레드 풀 크기를 제한하지 않습니다. 스레드 풀 크기는 운영 체제(또는 JVM)가 만들 수 있는 최대 스레드 크기에 전적으로 의존합니다

  • 4
  • newScheduledThreadPool: 크기가 무한한 스레드 풀을 만듭니다.이 스레드 풀은 정시 및 주기적인 작업 수행에 대한 요구를 지원합니다

  • 4
  • newSingleThreadExecutor: 단일 스레드의 스레드 풀을 만듭니다.이 스레드 풀은 정시 및 주기적인 작업 수행에 대한 요구를 지원합니다
  • public class ExecutorsTest {
    public static void main(String[] args) {
            //ExecutorService  e=Executors.newFixedThreadPool(5);//            ,         
           //ExecutorService e=Executors.newSingleThreadExecutor();//          
           ExecutorService e=Executors.newCachedThreadPool();//               ,                
           Executors.newScheduledThreadPool(3).schedule( new Runnable() {//   ,     10    
           @Override
           public void run() {
               System.err.println("botom");
              
           }
        }, 10, TimeUnit.SECONDS);//TimeUnit.SECONDS      
          
           Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() {//   ,       6    ,    2   
           @Override
           public void run() {
               System.err.println("botom");
           }
        }, 6, 2, TimeUnit.SECONDS);
         for (int i = 1; i < 10; i++) {
            final int taskCount=i;
            e.execute(new Runnable() {//    runable  
                  @Override
                  public void run() {
                      for (int i = 1; i < 10; i++) {
                          System.out.println(Thread.currentThread().getName()+" loop for " +taskCount);
                      }
                  }
               });
        }
        e.shutdown();//     
    }
    }

     
    참고: Executor의 excute 방법과submit 방법의 차이점
    execute: 되돌아오는 파라미터가 없는 라인을 실행합니다
    submit: 되돌아오는 형식의 라인을 실행합니다
    예:
       
       Future<String> f=e.submit(new Callable<String>() {//submit     Future  ,Future          Callable       
           @Override
           public String call() throws Exception {
               Thread.sleep(200);
               // TODO Auto-generated method stub
               return "hello";
           }
        });
        try {
          System.out.println("      :"+f.get());//get()      ,       ,get(long timeout, TimeUnit unit),            ,         
        } catch (InterruptedException e1) {
           // TODO Auto-generated catch block
           e1.printStackTrace();
        } catch (ExecutionException e1) {
           // TODO Auto-generated catch block
           e1.printStackTrace();
        } 

     

    좋은 웹페이지 즐겨찾기