Tipe lain dari kumpulan tugas adalah kumpulan tugas terjadwal. Dilihat dari namanya, kita dapat berasumsi bahwa kita menggunakan tipe ini untuk menjadwalkan kapan tugas tertentu harus diluncurkan.

Jenis layanan ini berguna saat kita memiliki tugas untuk meluncurkan aktivitas setelah beberapa waktu berlalu atau kita ingin menjadwalkan tugas berulang.

Untuk menggunakannya, kami memanggil Executors.newScheduledThreadPool(1) .

Kami akan membicarakan parameternya nanti. Namun untuk saat ini, yang perlu kita ketahui adalah saat metode ini dipanggil, kita mendapatkan objek ScheduledExecutorService .

ScheduledExecutorService adalah antarmuka yang memperluas ExecutorService .

Metode berikut muncul di antarmuka ini:

metode Penjelasan

ScheduledFuture<?>
schedule(Runnable command,
                                  long delay, TimeUnit unit);
Membuat dan menjalankan tindakan satu kali yang berjalan setelah penundaan yang ditentukan.

<V> ScheduledFuture<V>
schedule(Callable<V> callable,
                                      long delay, TimeUnit unit);
Membuat dan mengeksekusi aScheduledFutureobjek yang mengeksekusi setelah penundaan yang ditentukan.

ScheduledFuture<?>
scheduleAtFixedRate(Runnable command,
                                             long initialDelay,
                                             long period,
                                             TimeUnit unit);
Membuat dan menjalankan tindakan berulang yang berjalan pertama kali setelah penundaan awal yang ditentukan, lalu berjalan lagi setelah periode yang ditentukan. Dengan kata lain, eksekusi akan dimulai setelah initialDelay , lalu initialDelay + periode , lalu initialDelay + 2 * periode , dan seterusnya.

ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
                                                long initialDelay,
                                                long delay,
                                                TimeUnit unit);
Membuat dan mengeksekusi tindakan berulang yang dijalankan terlebih dahulu setelah penundaan awal yang ditentukan, lalu dijalankan lagi dengan penundaan yang ditentukan antara penyelesaian satu eksekusi dan dimulainya eksekusi berikutnya.

Jadi antarmuka memungkinkan kita menjalankan tugas secara berkala atau setelah beberapa penundaan.

Lebih lanjut tentang metode newScheduledThreadPool.

Kita dapat menyebutnya dengan beberapa cara:


newScheduledThreadPool(int corePoolSize)
corePoolSize adalah jumlah utas yang akan disimpan di kumpulan, meskipun tidak digunakan.

newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory)

corePoolSize adalah jumlah utas yang akan disimpan di kumpulan, meskipun tidak digunakan.

threadFactory adalah pabrik yang akan digunakan saat membuat utas baru.

Kedua metode akan membuat kumpulan utas yang dapat menjadwalkan tindakan untuk dieksekusi setelah penundaan yang ditentukan atau secara berkala.

Mari kita lihat contoh untuk melihat cara kerja ScheduledThreadPool .

Misalnya, kita memiliki tugas untuk memeriksa email setiap 5 detik, tetapi pemeriksaan ini tidak boleh memengaruhi program utama dan memerlukan potensi konsumsi sumber daya tambahan.

Kami memiliki kelas tugas yang mensimulasikan pengecekan email.


public class Task implements Runnable {
   @Override
   public void run() {
       System.out.println("Checking email...");
   }
}

Selanjutnya, kami membuat kumpulan utas dan menjadwalkan pemeriksaan.


ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
executorService.scheduleAtFixedRate(new Task(), 0, 5, TimeUnit.SECONDS);

Dalam output, setiap 5 detik kita melihat:

Memeriksa email...

Secara umum, kita dapat menggunakan kumpulan seperti itu untuk melakukan tugas "rumah tangga" berkala, seperti pada contoh. Tugas rumah tangga adalah tugas yang harus dilakukan terlepas dari apa yang dilakukan program utama.