1. 概要

このチュートリアルでは、Kotlinで遅延を使用して関数を呼び出す方法を学習します。 スケジューラー、スレッド、およびコルーチンを使用してそれを行う方法を示します。

2. タイマー付きの実行をスケジュールする

Timerクラスで提供される機能を見てみましょう。 2つの引数を取るschedule関数を公開します。 1つ目は、TimerTaskインターフェースの実装です。 インターフェイスはrunメソッドを定義します。 スケジューラーによって実行されます。 2番目の引数は、ミリ秒単位の実行の遅延です。

何よりも、ユーティリティクラスはバックグラウンドスレッドで実行をスケジュールします。 さらに、このクラスを使用すると、コードの実行を遅らせることができるだけでなく、タスクをスケジュールするときに使用できるメソッドがさらに多く含まれています。

1秒の遅延で出力に出力する簡単な例を作成しましょう。

fun scheduleWithTimer() {
    val stopWatch = StopWatch.createStarted()
    val timer = Timer()
        timer.schedule(object : TimerTask() {
        override fun run() {
            stopWatch.stop()
            println("Function in scheduleWithTimer executed with delay " + TimeUnit.MILLISECONDS.toSeconds(stopWatch.time))
            timer.cancel()
        }
    }, 1000)
}

タスク内でcancelメソッドを呼び出して、バックグラウンドスレッドを正常に停止します。

実行は出力に出力されます:

Function in scheduleWithTimer executed with delay 1

3. 遅延スレッドを実行する

Executorsクラスを見てみましょう。 Executorsクラスは、newSingleThreadScheduledExecutorメソッドを使用して新しいスレッドを実行する機能を提供します。 したがって、ScheduledExecutorServiceインターフェイスのインスタンスを作成します。 さらに、インターフェースはメソッドscheduleを定義します。3つの引数を取ります。 1つ目は、実行可能オブジェクトです。 2番目と3番目は、遅延と遅延の単位を定義します。

簡単な例を作成しましょう:

fun scheduleWithExecutor() {
    val stopWatch = StopWatch.createStarted()
    val executor = Executors.newSingleThreadScheduledExecutor()
        executor.schedule({
            stopWatch.stop()
            println("Function in scheduleWithExecutor executed with delay " + TimeUnit.MILLISECONDS.toSeconds(stopWatch.time))
            executor.shutdown()
        }, 2, TimeUnit.SECONDS)
}

このメソッドは新しいスレッドを開始しますが、これは2秒遅れます。 標準出力に出力します。

Function in scheduleWithExecutor executed with delay 2

さらに、アプリケーションを正常に停止するために必要なスレッドをシャットダウンします。

4. コルーチンによる実行の遅延

次に、コルーチンを使用して実行を遅らせる方法を見ていきます。 まず、コルーチンを使用すると、非同期プログラムを作成できます。 さらに、コルーチン内では、非常に簡単な方法で遅延を定義できます。 例を作成しましょう:

fun scheduleWithCoroutine() = runBlocking {
    val stopWatch = StopWatch.createStarted()
    launch {
        delay(3000L)
        stopWatch.stop()
        println("Function in scheduleWithCoroutine executed with delay " + TimeUnit.MILLISECONDS.toSeconds(stopWatch.time))
    }
}

まず、 runBlocking メソッドは、コルーチンが終了するまでメソッドの実行を停止します。 その後、launch関数がコルーチンを開始します。 最後に、遅延機能は実行を3秒遅らせます

実行は以下を返します:

Function in scheduleWithCoroutine executed with delay 3

5. 結論

この短い記事では、3つの異なる方法で関数の実行を遅らせる方法を示しました。 スケジューラー、スレッド、コルーチンの例を作成しました。

いつものように、例のソースコードはGitHubから入手できます。