코틀린에서 Timer로 어떤 함수나 작업을 주기적으로 실행하는 방법을 소개합니다. Timer를 이용하면 초기 지연 후 함수를 실행하거나, 일정 시간 간격으로 동일한 작업을 반복할 수 있습니다.
1. 초기 지연 후, 함수 1회 실행
Timer().schedule(milliseconds) { }
는 인자로 전달된 milliseconds 후에 { }
안의 코드들을 수행합니다.
1회성으로 한번만 수행하며, 주기적으로 수행하지는 않습니다.
아래 예제는 2초 뒤에 특정 동작을 수행하는 예제입니다. 로그에 시간도 함께 출력하여 언제 코드가 수행되었는지 확인할 수 있습니다.
import java.time.LocalDateTime
import java.util.*
import kotlin.concurrent.schedule
fun main() {
println("schedule a job: " + LocalDateTime.now())
Timer().schedule(2000) {
println("running a job: " + LocalDateTime.now())
}
println("done: " + LocalDateTime.now())
}
Output:
schedule a job: 2022-09-15T21:42:13.033
done: 2022-09-15T21:42:13.034
running a job: 2022-09-15T21:42:15.034
위의 코드들은 아래와 같이 구현할 수도 있습니다.
import java.time.LocalDateTime
import java.util.*
fun main() {
println("schedule a job: " + LocalDateTime.now())
Timer().schedule(object : TimerTask() {
override fun run() {
println("running a job: " + LocalDateTime.now())
}
}, 1000)
println("done: " + LocalDateTime.now())
}
2. 초기 지연 후, 주기적으로 함수 실행
Timer().scheduleAtFixedRate(initialDelay, intervalDelay) { }
는 initialDelay 동안 지연 후, intervalDelay 간격 마다 주기적으로 { }
의 코드를 수행합니다.
아래 예제는 1초 뒤에 특정 작업을 수행하며, 3초 간격으로 동일한 작업을 반복하는 예제입니다.
import java.time.LocalDateTime
import java.util.*
import kotlin.concurrent.scheduleAtFixedRate
fun main() {
println("schedule a job: " + LocalDateTime.now())
Timer().scheduleAtFixedRate(1000, 3000) {
println("running a job: " + LocalDateTime.now())
}
println("done: " + LocalDateTime.now())
}
Output:
schedule a job: 2022-09-15T21:46:23.432
done: 2022-09-15T21:46:23.433
running a job: 2022-09-15T21:46:24.433
running a job: 2022-09-15T21:46:27.434
running a job: 2022-09-15T21:46:30.433
running a job: 2022-09-15T21:46:33.433
....
위의 코드들은 아래와 같이 구현할 수도 있습니다.
import java.time.LocalDateTime
import java.util.*
fun main() {
println("schedule a job: " + LocalDateTime.now())
Timer().scheduleAtFixedRate( object : TimerTask() {
override fun run() {
println("running a job: " + LocalDateTime.now())
}
}, 1000, 3000)
println("done: " + LocalDateTime.now())
}
Loading script...
Related Posts
- Kotlin - 배열에서 최소 값, 최대 값 찾기
- Kotlin - 2차원 배열 선언, 초기화 방법
- Kotlin - 배열 선언, 초기화 방법
- Kotlin - 리스트, 배열 길이 가져오기
- Kotlin - 리스트에서 최대, 최소 값 찾기
- Kotlin - for 반복문, 배열/리스트 순회
- Kotlin - Timer, 주기적으로 함수 실행
- Kotlin - sleep, 쓰레드 몇 초 지연
- Kotlin - Thread 생성 및 실행
- Kotlin에서 정규표현식 사용하기
- Kotlin - 문자열 길이 계산
- Kotlin - 문자열 비교 방법(equals, ==, compareTo)
- Kotlin - 2개의 배열 하나로 합치기
- Kotlin - 2개의 List 하나로 합치기
- Kotlin - 디렉토리의 모든 파일 리스트 출력
- Kotlin - 리스트 정렬 방법 (sort, sortBy, sortWith)
- Kotlin - 문자열 뒤집기 (Reverse String)
- Kotlin - 랜덤 숫자 생성 (Random, SecureRandom)
- Kotlin - Range, 숫자 범위 표현
- Kotlin - 음수를 양수로 변환, math.abs()
- Kotlin - List를 Set로 변환
- Kotlin - Set를 List로 변환
- Kotlin - 문자열에서 숫자(int)만 추출하는 방법
- Kotlin - Map을 List로 변환하는 방법
- Kotlin - File, Directory가 존재하는지 확인
- Kotlin - List를 Map으로 변환
- Kotlin - List의 중복 요소 제거
- Kotlin - List를 Array로 변환
- Kotlin - 엘비스 연산자 (Elvis Operation)
- Kotlin - Array를 List로 변환
- Kotlin - String을 Float으로 변환
- Kotlin - String을 Double으로 변환
- Kotlin - String을 Int로 변환
- Kotlin - String을 Long으로 변환
- Kotlin - String Null 또는 Empty 체크