Kotlin Task Scheduler: Overview and Usage Examples

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

Kotlin Task Scheduler: Complete Guide



A task scheduler is a powerful tool that allows you to automate the execution of specific actions at a given time or with a given frequency. In Kotlin, which is actively used for developing server applications, Android applications, and even scripts, there are several ways to implement a task scheduler. In this article, we will take a detailed look at the main approaches, their advantages, and provide practical code examples.



Why do you need a task scheduler?

A task scheduler solves many typical development tasks:

  • Automatic sending of notifications (email, push notifications) on a schedule.
  • Cleaning temporary data (cache, user sessions) once a day.
  • Periodic synchronization with external APIs or databases.
  • Running background tasks in Android applications (WorkManager).
  • Scheduling backups and reports.


Main ways to implement a scheduler in Kotlin



Let's look at three most popular approaches: using coroutines, the classic Timer, and ScheduledExecutorService from Java. Each of them has its own features.



1. Scheduler based on Kotlin coroutines

Coroutines are a modern and efficient way to work with asynchrony in Kotlin. To create a scheduler, it is enough to use the delay() function inside a coroutine. This approach is lightweight, does not block the thread, and is ideal for simple tasks.



import kotlinx.coroutines.*

fun main() = runBlocking { println("Scheduler started. The task will be executed in 3 seconds.")

// Schedule a task with a delay val job = launch { delay(3000L) // 3 seconds println("Task completed: time is up!") }

// Wait for the task to complete job.join() println("Program finished.")}


For recurring tasks, use a loop inside a coroutine:



import kotlinx.coroutines.*

fun main() = runBlocking { println("The task will run every 2 seconds, 5 times.")

val job = launch { repeat(5) { iteration -> delay(2000L) println("Execution #${iteration + 1}: ${System.currentTimeMillis()}") } }

job.join() println("All scheduled tasks completed.")}


2. Classic Timer (Java/Kotlin)

java.util.Timer is a simple method familiar to many developers. It allows you to schedule tasks with a delay and periodicity. However, it is worth remembering that Timer uses a single thread, and if a task takes a long time, it can delay subsequent ones.



import java.util.*

fun main() { val timer = Timer()

// Schedule a task with a 2-second delay timer.schedule(object : TimerTask() { override fun run() { println("Task completed after 2 seconds.") } }, 2000L)

// Schedule a recurring task every 1.5 seconds, starting after 1 second timer.schedule(object : TimerTask() { override fun run() { println("Recurring task: ${System.currentTimeMillis()}") } }, 1000L, 1500L)

// Give time for tasks to execute Thread.sleep(5000L) timer.cancel() println("Timer stopped.")}


3. ScheduledExecutorService (recommended for multithreaded environments)

This class from Java java.util.concurrent provides more flexible capabilities: a thread pool, exception handling, and task cancellation. It is preferable to Timer in serious projects.



import java.util.concurrent.*

fun main() { val scheduler = Executors.newScheduledThre

Recommendations