자바 다 중 스 레 드 학습-java.util.concurrent 상세 설명(3)ScheduledThreadPoolExecutor

이전 블 로그
자바 다 중 스 레 드 신 호 량/Future Task
----------------------------------------------------------------------------------
6. ScheduledThreadPoolExecutor
    먼저 JDK 1.5 API 에서 이러한 종류 에 대한 상세 한 소 개 를 배 워 보 겠 습 니 다.
    "주어진 지연 후 명령 을 실행 하거나 정기 적 으로 명령 을 수행 할 수 있 습 니 다.여러 개의 보조 라인 이 필요 할 때,또는 Thread PoolExecutor 가 추가 적 인 유연성 이나 기능 을 요구 할 때,이것 은 Timer 보다 낫다.
    지연 되 는 작업 을 사용 하면 실행 하지만 언제 사용 하 는 지,사용 한 후 언제 실행 하 는 지 는 실시 간 으로 보장 되 지 않 습 니 다.같은 실행 시간 에 배 정 된 작업 을 제출 한 선진 선 출(FIFO)순서에 따라 사용 합 니 다.
    이러한 계승 은 Thread PoolExecutor 에서 이 루어 졌 지만 몇 가지 계승 조정 방법 은 이런 것 에 도움 이 되 지 않 는 다.특히 코어 풀 사이즈 스 레 드 와 무 계 대기 열 을 사용 하 는 고정 크기 의 풀 로 서 maximumPoolSize 를 조정 하 는 것 은 별 효과 가 없습니다."
    JDK 1.5 이전에 우 리 는 정시/주기 조작 에 대해 모두 Timer 를 통 해 이 루어 졌 다.하지만 타 이 머 는 다음 과 같은 몇 가지 위험 이 있다[JCIP]
a.Timer 는 절대적 인 시간 에 기초 한 것 이다.시스템 시계의 영향 을 받 기 쉽다.
b.Timer 는 모든 TimeTask 를 실행 하기 위해 하나의 스 레 드 만 새로 만 들 었 습 니 다.모든 TimeTask 가 영향 을 미 칠 수 있 습 니 다.
c.Timer 는 Timer Task 의 이상 을 포착 하지 않 고 간단하게 멈 출 뿐이다.이렇게 하면 반드시 다른 TimeTask 의 집행 에 영향 을 줄 것 이다.
    JDK 1.5 이상 버 전 을 사용한다 면 타이머 대신 Scheduled Thread PoolExecutor 를 사용 하 는 것 을 권장 합 니 다.그것 은 기본적으로 상술 한 문 제 를 해결 했다.이것 은 상대 적 인 시간 을 사용 하여 스 레 드 탱크 로 Timer Task 를 실행 하면 Timer Task 이상 이 나 옵 니 다.
    다음은 간단 한 실례 를 통 해 Scheduled Thread PoolExecutor 의 사용 을 논술 한다.
  
 
  우 리 는 정기 적 으로 타이머 에 이상 을 던 지게 한다.    우 리 는 정기 적 으로 콘 솔 에서 시스템 시간 을 인쇄 한다.
코드 는 다음 과 같 습 니 다.

import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;


public class TestScheduledThreadPoolExecutor {
	
	public static void main(String[] args) {
		ScheduledThreadPoolExecutor exec=new ScheduledThreadPoolExecutor(1);
		
		exec.scheduleAtFixedRate(new Runnable(){//           
			@Override
			public void run() {
				throw new RuntimeException();
			}}, 1000, 5000, TimeUnit.MILLISECONDS);
		
		exec.scheduleAtFixedRate(new Runnable(){//            ,          
			@Override
			public void run() {
				System.out.println(System.nanoTime());
			}}, 1000, 2000, TimeUnit.MILLISECONDS);
	}

}


결론:당신 의 타 이 머 를 Scheduled Thread PoolExecutor 로 바 꿀 때 가 되 었 습 니 다.
--------------------------------------------------------------------
더 많은 자바 다 중 스 레 드 자료,방문 을 환영 합 니 다.
http://janeky.iteye.com/category/124727

좋은 웹페이지 즐겨찾기