Pelaksana

Pelaksana ialah antara muka asas untuk kelas yang melaksanakan pelancaran tugas Runnable . Ini memberikan bantuan dengan menambahkan tugasan dan cara memulakannya.

ExecutorService ialah antara muka yang memanjangkan sifat Executor dan yang menerangkan perkhidmatan untuk menjalankan tugas Runnable atau Callable . Kaedah penyerahan menerima tugas dalam bentuk Boleh Dipanggil atau Boleh Dijalankan sebagai input , dan Masa Depan digunakan sebagai nilai pulangan, yang melaluinya anda boleh mendapatkan hasilnya.

Kaedah invokeAll bertanggungjawab untuk melaksanakan tugasan, mengembalikan senarai tugasan dengan status dan hasil penyelesaiannya.

Kaedah invokeAny bertanggungjawab untuk melaksanakan tugas, mengembalikan hasil tugas yang berjaya diselesaikan (iaitu, tanpa membuang pengecualian), jika ada.

ScheduledExecutorService - antara muka ini menambah keupayaan untuk menjalankan tugas yang belum selesai dengan kelewatan tertentu atau tempoh tertentu.

AbstractExecutorService ialah kelas abstrak untuk membina ExecutorService 'a. Di dalamnya terdapat pelaksanaan kaedah 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

Executors ialah kelas kilang untuk mencipta ThreadPoolExecutor , ScheduledThreadPoolExecutor . Jika anda perlu mencipta salah satu kolam ini, maka kilang ini adalah apa yang anda perlukan. Ia mengandungi penyesuai berbeza Runnable-Callable, PrivilegedAction-Callable, PrivilegedExceptionAction-Callable dan lain-lain. Mempunyai kaedah statik untuk mencipta ThreadPool yang berbeza .

ThreadPoolExecutor - Melaksanakan antara muka Executor dan ExecutorService dan memisahkan penciptaan tugas daripada pelaksanaan tugas. Kita perlu melaksanakan objek Runnable dan menghantarnya kepada pelaksana, dan ThreadPoolExecutor bertanggungjawab untuk pelaksanaan, instantiasi dan kerja dengan benang.

ScheduledThreadPoolExecutor - Sebagai tambahan kepada kaedah ThreadPoolExecutor , ia mencipta kumpulan utas yang boleh menjadualkan arahan untuk dilaksanakan selepas kelewatan tertentu atau untuk pelaksanaan berkala.

ThreadFactoryialah objek yang mencipta benang baharu atas permintaan. Kita perlu menghantar contoh kepada kaedah 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 - membolehkan anda menentukan pengendali untuk tugasan yang atas sebab tertentu tidak boleh dilaksanakan melalui ThreadPoolExecutor . Ini berlaku apabila tiada strim percuma atau perkhidmatan ditutup atau ditutup.

Beberapa pelaksanaan standard ditemui dalam kelas ThreadPoolExecutor :

  • CallerRunsPolicy - menjalankan tugas pada urutan panggilan;
  • AbortPolicy - membuang pengecualian;
  • DiscardPolicy - mengabaikan tugas;
  • DiscardOldestPolicy - Mengalih keluar tugas tertua yang belum dimulakan daripada baris gilir, kemudian cuba menambah tugasan baharu sekali lagi.

Perkhidmatan Penyiapan

CompletionService ialah antara muka perkhidmatan dengan penyahgandingan melancarkan tugas tak segerak dan mendapatkan hasil. Untuk menambah tugasan, terdapat kaedahserah, dan untuk mendapatkan hasil tugasan yang telah selesai,pengambilantinjauan pendapattidak menyekat.

ExecutorCompletionService ialah pembalut pada mana-mana kelas yang melaksanakan antara muka Executor , seperti ThreadPoolExecutor atau ForkJoinPool . Ia digunakan apabila perlu untuk abstrak daripada kaedah pelancaran tugas dan mengawal pelaksanaannya.

Jika ada tugasan yang telah selesai, barulah kami cabut. Jika tiada tugasan, barulah kita gantung sampai sesuatu selesai. Perkhidmatan ini menggunakan LinkedBlockingQueue pada terasnya, tetapi anda boleh lulus dalam mana-mana pelaksanaan BlockingQueue.