본문 바로가기

Java/Vert.x

버텍스 코어: 타이머(One-shot timers, Periodic timers)

이 문서의 내용

    더보기

    타이머를 사용하면 나중에 실행될 코드를  등록 할 수 있습니다.

    타이머는 한 번 실행되는 One-shot timers와 반복 실행되는 Periodic timers가 있습니다.

    타이머를 실행하려면 Vertx 객체에 접근 할 수 있어야 합니다.

    원샷 타이머(One-shot timers)

    원샷 타이머는 지정된 지연 시간 이후에 동작하는 이벤트 핸들러를 등록합니다.

    지연 시간 단위는 밀리세컨드(Milliseconds)입니다.

    원샷 타이머를 등록하려면 setTimer()를 사용합니다.

    long setTimer(long delay, Handler<Long> handler);

    메소드의 리턴 값과 이벤트 핸들러의 리턴 값은 타이머 ID입니다.

    타이머 ID는 나중에 타이머를 취소 할 수 있는 유니크한 키 값입니다.

    long t = vertx.setTimer(1000L, timerId -> { 
    	System.out.println("이 코드는 1초 이후에 실행됩니다 - 타이머 ID : " + timerId); 
    });
    
    System.out.println("1초 후에 동작하는 원샷 타이머를 설정했습니다 - 타이머 ID : " + t);

    반복 타이머(Periodic timers)

    반복 타이머는 지정된 시간 간격으로 동작하는 이벤트 핸들러를 등록합니다.

    반복 실행되는 시간 간격 단위는 밀리세컨드(Milliseconds)입니다.

    반복 타이머는 등록되는 즉시 호출되는 것은 아니며, 최초 호출 시점은 첫 번째 반복 실행 시간의 간격에 도달 했을 때입니다.

    반복 타이머를 등록하려면 setPeriodic()을 사용합니다.

    long setPeriodic(long delay, Handler<Long> handler);

    반복 타이머를 등록하면 마찬가지로 타이머 ID를 리턴합니다.

    long t = vertx.setPeriodic(1000L, timerId -> {
    	System.out.println("이 코드는 1초 간격으로 실행됩니다 - 타이머 ID : " + timerId);
    });
    
    System.out.println("1초 간격으로 동작하는 반복 타이머를 설정했습니다 - 타이머 ID : " + t);
    더보기

    반복 타이머를 사용 할 때 주의 할 점은 타이머 반복 주기보다 오래 걸리는 코드를 타이머 내부에서 실행하면 안된다는 점입니다.

    그렇게 되면 실행 코드가 점점 쌓이게 되고(Stacked) 애플리케이션의 성능은 시간이 지날 수록 안좋아지게 됩니다.

    타이머 취소

    타이머 ID는 타이머의 유형(원샷 타이머, 반복 타이머) 모두에서 유니크한 키입니다.

    이미 등록한 타이머를 취소하려면 cancelTimer()를 사용합니다.

    인자로 전달 하는 값은 타이머 ID입니다.

    boolean cancelTimer(long id);
    더보기

    애플리케이션의 종료 처리 코드에 타이머를 종료하는 코드를 추가 할 필요는 없습니다.

    타이머는 버텍스 리소스의 일종으로 버텍스 애플리케이션이 종료 될 때 함께 Close 됩니다.

    정리 및 복습

    • 나중에 실행하기 위한 코드를 등록하려면 타이머를 사용합니다.
    • 타이머는 원샷 타이머(One-shot timers)반복 타이머(Periodic timers)가 존재합니다.
    원샷 타이머 반복 타이머
    원샷 타이머는 지정 된 시간 이후에 단 한 번만 실행됩니다.
    지정 된 시간의 단위는 밀리세컨드입니다.
    반복 타이머는 지정 된 시간 간격으로 반복 실행됩니다.
    지정 된 시간의 단위는 밀리세컨드입니다.
    반복 타이머의 최초 실행은 타이머가 등록 된 즉시가 아닌, 타이머의 최초 반복 시간에 도달했을 때입니다.
    • 타이머가 등록되면 메소드의 리턴 또는 핸들러 리턴 값으로 타이머 ID를 얻을 수 있습니다.
    • 타이머 ID는 원샷 타이머와 반복 타이머 모두에서 유니크한 키입니다.
    • 타이머 ID를 사용하여 타이머를 취소 할 수 있습니다.