자바 스 레 드 탱크 를 사용 하여 다 중 스 레 드 만 들 기

개발 중 에는 모두 스 레 드 탱크 를 사용한다.
배경: 자주 만 들 고 소각 하 며 사용량 이 매우 많은 자원, 예 를 들 어 동시 다발 상황 에서 의 스 레 드 는 성능 에 큰 영향 을 줍 니 다.
사고: 여러 개의 스 레 드 를 미리 만 들 고 스 레 드 탱크 에 넣 으 며 사용 할 때 직접 가 져 오고 사용 한 후에 풀 에 넣 습 니 다.빈번 한 창설 과 소각, 중복 이용 을 피 할 수 있다.생활 속 의 대중 교통 과 유사 하 다.
장점: 1. 응답 속도 향상 (새 스 레 드 를 만 드 는 시간 감소)
2. 자원 소 모 를 줄 입 니 다 (스 레 드 탱크 의 스 레 드 를 중복 이용 하여 매번 만 들 필요 가 없습니다)
3. 스 레 드 관리 에 편리 한 corePoolSize: 핵심 탱크 의 크기, maximumPoolSize: 최대 스 레 드 수, keepAliveTime: 스 레 드 가 작업 이 없 을 때 최대 얼마나 오래 유지 하면 종 료 됩 니 다.
JDK 5.0 기 는 스 레 드 풀 관련 API: ExecutorService 와 Executors 를 제공 합 니 다.
ExecutorService: 진정한 스 레 드 탱크 인터페이스 에서 흔히 볼 수 있 는 하위 클래스 ThreadPoolExecutor
void execute (Runnable command): 작업 / 명령 을 수행 하고 반환 값 이 없 으 며 보통 Runnable 을 수행 합 니 다.
Future submit (Callable task): 작업 을 수행 하고 반환 값 이 있 으 며 보통 Callable 을 수행 합 니 다.
void shutdown (): 연결 풀 닫 기
Executors: 도구 류, 스 레 드 탱크 의 공장 류, 서로 다른 유형의 스 레 드 탱크 를 만 들 고 되 돌려 줍 니 다.
Executors. newCachedThreadPool (): 필요 에 따라 새 스 레 드 를 만 들 수 있 는 스 레 드 풀 을 만 듭 니 다.
Executors.newFixedThreadPool(n); 고정 스 레 드 수 를 다시 사용 할 수 있 는 스 레 드 풀 을 만 듭 니 다.
Executors. newSingleThreadExecutor (): 하나의 스 레 드 만 있 는 스 레 드 풀 을 만 듭 니 다.
Executors. new Scheduled ThreadPool (n): 주어진 지연 후 명령 을 실행 하거나 정기 적 으로 실행 할 수 있 는 스 레 드 풀 을 만 듭 니 다.
class NumberThread implements Runnable{
     
    @Override
    public void run() {
     
        for (int i = 0; i <= 100; i++) {
     
            if(i % 2 == 0){
     
 System.out.println(Thread.currentThread().getName()+ ":" + i);
            }
        }
    }
}
class NumberThread1 implements Runnable{
     
    @Override
    public void run() {
     
        for (int i = 0; i <= 100; i++) {
     
            if(i % 2 != 0){
     
 System.out.println(Thread.currentThread().getName()+ ":" + i);
            }
        }
    }
}
class NumberThread2 implements Callable{
     
    @Override
    public Object call() throws Exception {
     
        for (int i = 0; i <= 100; i++) {
     
            if(i % 2 == 0){
     
System.out.println(Thread.currentThread().getName() + ":" + i);
            }
        }
        return null;
    }
}
public class ThreadPool {
     
    public static void main(String[] args) {
     
       //             
        ExecutorService executorService = Executors.newFixedThreadPool(10);
//        ThreadPoolExecutor   ExecutorService  
        ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor)executorService;
        threadPoolExecutor.setCorePoolSize(15);
        System.out.println(executorService.getClass());
        //           ,      Runnable Callable        
        executorService.execute(new NumberThread());//      Runnable
        executorService.execute(new NumberThread1());
        NumberThread2 numberThread2 = new NumberThread2();
        FutureTask futureTask = new FutureTask(numberThread2);
        executorService.submit(futureTask);//      Callable
        executorService.shutdown();//      
    }
}

좋은 웹페이지 즐겨찾기