Pelaksana
Pelaksana adalah antarmuka dasar untuk kelas yang mengimplementasikan peluncuran tugas Runnable . Ini memberikan bantuan untuk menambahkan tugas dan cara memulainya.
ExecutorService adalah antarmuka yang memperluas properti Executor dan menjelaskan layanan untuk menjalankan tugas Runnable atau Callable . Metode submit menerima tugas dalam bentuk Callable atau Runnable sebagai input , dan Future digunakan sebagai nilai pengembalian, di mana Anda bisa mendapatkan hasilnya.
Metode invokeAll bertanggung jawab untuk menjalankan tugas, mengembalikan daftar tugas dengan status dan hasil penyelesaiannya.
Metode invokeAny bertanggung jawab untuk menjalankan tugas, mengembalikan hasil tugas yang berhasil diselesaikan (yaitu, tanpa melempar pengecualian), jika ada.
ScheduledExecutorService - antarmuka ini menambahkan kemampuan untuk menjalankan tugas yang tertunda dengan penundaan tertentu atau periode tertentu.
AbstractExecutorService adalah kelas abstrak untuk membuat ExecutorService 'a. Di dalamnya ada implementasi dari metode submit , invokeAll , invokeAny . Kelas ini mewarisi ThreadPoolExecutor , ScheduledThreadPoolExecutor , dan ForkJoinPool .
public static void main(String[] args) {
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
Callable<String> task = () -> {
System.out.println(Thread.currentThread().getName());
return Thread.currentThread().getName();
};
scheduledExecutorService.schedule(task, 10, TimeUnit.SECONDS);
scheduledExecutorService.shutdown();
}
ThreadPoolExecutor
Pelaksana adalah kelas pabrik untuk membuat ThreadPoolExecutor , ScheduledThreadPoolExecutor . Jika Anda perlu membuat salah satu kumpulan ini, maka pabrik inilah yang Anda butuhkan. Ini berisi adaptor berbeda Runnable-Callable, PrivilegedAction-Callable, PrivilegedExceptionAction-Callable dan lainnya. Memiliki metode statis untuk membuat ThreadPool yang berbeda .
ThreadPoolExecutor - Mengimplementasikan antarmuka Executor dan ExecutorService dan memisahkan pembuatan tugas dari eksekusi tugas. Kita perlu mengimplementasikan objek Runnable dan mengirimkannya ke eksekutor, dan ThreadPoolExecutor bertanggung jawab atas eksekusi, pembuatan instance, dan bekerja dengan utas.
ScheduledThreadPoolExecutor - Selain metode ThreadPoolExecutor , ini membuat kumpulan utas yang dapat menjadwalkan perintah untuk dieksekusi setelah penundaan tertentu atau untuk eksekusi berkala.
ThreadFactoryadalah objek yang membuat utas baru sesuai permintaan. Kita perlu meneruskan instance ke metode Executors.newSingleThreadExecutor(ThreadFactory threadFactory) .
ExecutorService executorService = Executors.newSingleThreadExecutor(new ThreadFactory() {
@Override public Thread newThread(Runnable r) {
Thread thread = new Thread(r, "MyThread");
thread.setPriority(Thread.MAX_PRIORITY);
return thread; }
});
RejectedExecutionHandler - memungkinkan Anda menentukan penangan untuk tugas yang karena alasan tertentu tidak dapat dijalankan melalui ThreadPoolExecutor . Ini terjadi ketika tidak ada aliran gratis atau layanan dimatikan atau dimatikan.
Beberapa implementasi standar ditemukan di kelas ThreadPoolExecutor :
- CallerRunsPolicy - menjalankan tugas di utas panggilan;
- AbortPolicy - melempar pengecualian;
- DiscardPolicy - mengabaikan tugas;
- DiscardOldestPolicy - Menghapus tugas terlama yang belum dimulai dari antrean, lalu mencoba menambahkan tugas baru lagi.
Layanan Penyelesaian
CompletionService adalah antarmuka layanan dengan pemisahan peluncuran tugas asinkron dan mendapatkan hasil. Untuk menambahkan tugas, ada metodekirim, dan untuk mendapatkan hasil tugas yang sudah selesai,ambiljajak pendapatnon-pemblokiran.
ExecutorCompletionService adalah pembungkus atas setiap kelas yang mengimplementasikan antarmuka Pelaksana , seperti ThreadPoolExecutor atau ForkJoinPool . Ini digunakan ketika diperlukan untuk mengabstraksi dari metode meluncurkan tugas dan mengontrol pelaksanaannya.
Jika ada tugas yang sudah selesai, maka kami tarik keluar. Jika tidak ada tugas, maka kami bertahan sampai sesuatu selesai. Layanan ini menggunakan LinkedBlockingQueue pada intinya, tetapi Anda dapat meneruskan implementasi BlockingQueue apa pun.
GO TO FULL VERSION