ソフトウェア システムの複雑さが増すにつれて、システムに関与する非同期タスクがますます増えています。これらの非同期タスクを効率的にスケジュールする方法は、必要なスキルです。 Java では、スケジュールされたタスクのスケジュールに ScheduledThreadPoolExecutor を使用できます。この記事では、ScheduledThreadPoolExecutor の基本的な使用法と、それを使用して非同期タスクのスケジュールされたスケジュールを実装する方法を紹介します。
ScheduledThreadPoolExecutor は、スケジュールされたタスクのスケジューリングを実装する Java に組み込まれたクラスです。 ThreadPoolExecutor クラスを継承し、スレッド プールのすべての特性を備え、指定された時間間隔または遅延時間に従って指定されたタスクを実行できます。
ScheduledThreadPoolExecutor を使用してスケジュールされたタスクをスケジュールするには、次の基本条件を満たす必要があります。
ScheduledThreadPoolExecutor オブジェクトを作成する場合、スレッド プール サイズを指定する必要があります。スレッド プールのサイズによって、同時に実行できるタスクの数と、タスクに必要なリソースの数が決まります。オブジェクトを作成するとき、corePoolSize と minimumPoolSize という 2 つのパラメーターを指定できます。これらは、それぞれコア スレッド プールのサイズと最大スレッド プールのサイズを表します。ここでは、それらを等しい値に設定できます。つまり、固定サイズのスレッド プールを使用します。
ScheduledThreadPoolExecutor のタスクは、Java クラス ライブラリの Runnable および Callable インターフェイスに基づいて実装されます。タスクを定義するときに、実行可能または呼び出し可能を選択でき、実際のニーズに応じて対応する実装方法を選択できます。
ScheduledThreadPoolExecutorでは、タスクの実行方法を指定できます。選択する方法は 2 つあります。1 つは、scheduleAtFixedRate() メソッドを使用する方法で、もう 1 つは、scheduleWithFixedDelay() メソッドを使用する方法です。これら 2 つのメソッドの違いは、scheduleAtFixedRate() メソッドは一定の時間間隔に基づいてタスクを実行するのに対し、scheduleWithFixedDelay() メソッドはタスクの実行完了時刻に基づいて次のタスクの実行時間を計算することです。
以下、コードに基づいてこれらの手順を詳しく紹介します。
次に、ScheduledThreadPoolExecutor オブジェクトを作成するための基本的なサンプル コードを示します。
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
このコードでは、Java の Executor を使用します。ツール このクラスは、サイズ 1 のスレッド プールを作成します。 ScheduledThreadPoolExecutor は ThreadPoolExecutor クラスを継承しているため、通常のスレッド プール関連のメソッドを使用してスレッド プールを管理できます。
ScheduledThreadPoolExecutor では、Runnable インターフェイスと Callable インターフェイスの両方を使用してタスクを定義できます。例:
Runnable task = new Runnable() { @Override public void run() { // 任务内容 } };
または:
Callable<String> task = new Callable<String>() { @Override public String call() throws Exception { // 任务内容 return null; } };
ご覧のとおり、Runnable インターフェイスと Callable インターフェイスを使用してタスクを定義する方法は非常に似ています。唯一の違いは、Callable インターフェイスは値を返す必要があるのに対し、Runnable インターフェイスは値を返す必要がないことです。
前の紹介によると、ScheduledThreadPoolExecutor には、scheduleAtFixedRate() とScheduleWithFixedDelay() という 2 つのタスク実行メソッドが用意されています。以下に、これら 2 つの方法のそれぞれの使用方法を説明します。
scheduleAtFixedRate()
scheduleAtFixedRate() メソッドを使用して、固定タスクを実行します。このメソッドは、次の 4 つのパラメータを受け取ります:
次に、scheduleAtFixedRate() メソッドの例を示します。
executor.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS);
このコードは、0 秒の遅延の後、タスクが 1 秒ごとに実行されることを意味します。タスクの内容は、事前に定義された Runnable または Callable に実装する必要があります。
scheduleWithFixedDelay()
scheduleAtFixedRate() メソッドと同様に、scheduleWithFixedDelay() メソッドも次の 4 つのパラメータを受け取ります。
次に、scheduleWithFixedDelay() メソッドの例を示します。
executor.scheduleWithFixedDelay(task, 0, 1, TimeUnit.SECONDS);
このコードは、最初のタスクが 0 秒の遅延後に実行され、その後に実行されることを示します。タスクの実行が完了すると、1 秒遅れて再度実行されます。タスクの内容は、事前に定義された Runnable または Callable に実装する必要があります。
ScheduledThreadPoolExecutor を使用してスケジュールされたタスクをスケジュールする方法をすでに紹介しましたが、ScheduledThreadPoolExecutor のメリットとデメリットをまとめてみましょう。
利点:
以上がスケジュールされたタスクのスケジュール設定のために Java で ScheduledThreadPoolExecutor 関数を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。