Skip to content

Difference Between delay and Thread.sleep in Kotlin

Kotlin, Delay, Thread.sleep1 min read

When working with concurrent programming in Kotlin, it's important to understand the differences between the 'delay' function and 'Thread.sleep'. While both can be used to introduce delays in your code, they have different characteristics and should be used in specific scenarios. In this article, we will dive deeper into these differences and provide examples of when to use each approach.

Using delay for Coroutine-based Concurrency

In Kotlin, coroutines are commonly used for asynchronous programming. The 'delay' function is a suspending function provided by the kotlinx.coroutines library. It allows you to introduce a delay without blocking the thread, making it well-suited for coroutine-based concurrency.

Here's an example of using 'delay' in Android development with Kotlin:

1import kotlinx.coroutines.delay
2import kotlinx.coroutines.runBlocking
4fun main() {
5 runBlocking {
6 println("Start")
7 delay(1000) // Delay for 1 second
8 println("End")
9 }

In this example, the 'runBlocking' function creates a coroutine scope within which we can use 'delay'. The 'delay' suspends the coroutine for the specified time, allowing other tasks to be executed concurrently. This is particularly useful in scenarios such as background processing or handling user interactions in UI applications.

Using Thread.sleep for Traditional Thread-based Delays

While 'delay' is suitable for coroutine-based concurrency, 'Thread.sleep' is used in traditional thread-based programming scenarios. It's a function provided by the standard Java library and can cause the current thread to sleep for a specified duration.

Here's an example of using 'Thread.sleep' in Kotlin:

1fun main() {
2 println("Start")
3 Thread.sleep(1000) // Sleep for 1 second
4 println("End")

In this example, the execution of the main thread is paused for 1 second before printing "End" to the console. Unlike 'delay', which only suspends the coroutine, 'Thread.sleep' blocks the entire thread. Therefore, it's crucial to use it judiciously, especially in scenarios where you need to maintain responsiveness or when working with UI threads.


In summary, the 'delay' function and 'Thread.sleep' serve different purposes in Kotlin. 'delay' is designed for coroutine-based concurrency, allowing delays without blocking the thread, while 'Thread.sleep' is used in traditional thread-based programming scenarios where the entire thread needs to be paused. Understanding these differences will help you choose the right approach for your specific use case.