ผู้ดำเนินการ

Executorเป็นอินเทอร์เฟซพื้นฐานสำหรับคลาสที่ใช้เรียกใช้งาน Runnable ซึ่งจะให้ความช่วยเหลือในการเพิ่มงานและวิธีเริ่มต้น

ExecutorServiceเป็นอินเทอร์เฟซที่ขยายคุณสมบัติของ Executorและอธิบายบริการสำหรับการเรียกใช้งาน Runnableหรือ Callable วิธีการส่งยอมรับงานในรูปแบบของ Callableหรือ Runnable เป็นอินพุต และ Future ใช้เป็นค่าส่งคืน ซึ่งคุณจะได้รับผลลัพธ์

เมธอดinvokeAllรับผิดชอบในการดำเนินงาน ส่งคืนรายการงานพร้อมสถานะและผลลัพธ์ที่เสร็จสิ้น

เมธอดinvokeAnyรับผิดชอบในการดำเนินการงาน โดยส่งคืนผลลัพธ์ของงานที่เสร็จสมบูรณ์แล้ว (นั่นคือ โดยไม่ต้องโยนข้อยกเว้น) ถ้ามี

ScheduledExecutorService - อินเทอร์เฟซนี้เพิ่มความสามารถในการเรียกใช้งานที่ค้างอยู่โดยมีความล่าช้าหรือระยะเวลาหนึ่ง

AbstractExecutorServiceเป็นคลาสนามธรรมสำหรับสร้าง ExecutorService 'ก. ภายในมีการใช้งานวิธีการ submit , invokeAll , invokeAny คลาสนี้สืบทอด ThreadPoolExecutor , ScheduledThreadPoolExecutorและ 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เป็นคลาสโรงงานสำหรับสร้าง ThreadPoolExecutor , ScheduledThreadPoolExecutor หากคุณต้องการสร้างหนึ่งในพูลเหล่านี้ โรงงานแห่งนี้คือสิ่งที่คุณต้องการ ประกอบด้วยอะแด็ปเตอร์ Runnable-Callable, PrivilegedAction-Callable, PrivilegedExceptionAction-Callable และอื่นๆ มีเมธอดคงที่สำหรับการสร้าง ThreadPool ที่แตกต่าง กัน

ThreadPoolExecutor - ใช้ อินเทอร์เฟซ Executorและ ExecutorService และแยกการสร้างงานออกจากการดำเนินการงาน เราจำเป็นต้องนำ ออบเจกต์ ที่เรียกใช้ได้ไปใช้และส่งไปยังตัวดำเนินการ และ ThreadPoolExecutorจะรับผิดชอบการดำเนินการ การสร้างอินสแตนซ์ และการทำงานกับเธรด

ScheduledThreadPoolExecutor - นอกจาก เมธอด ThreadPoolExecutorแล้ว ยังสร้างกลุ่มของเธรดที่สามารถกำหนดเวลาคำสั่งให้ดำเนินการหลังจากความล่าช้าที่กำหนดหรือสำหรับการดำเนินการเป็นระยะ

โรงงานด้ายเป็นวัตถุที่สร้างเธรดใหม่ตามต้องการ เราจำเป็นต้องส่งอินสแตนซ์ไปยังเมธอด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 - อนุญาตให้คุณกำหนดตัวจัดการสำหรับงานที่ไม่สามารถดำเนินการผ่าน ThreadPoolExecutorได้สิ่งนี้เกิดขึ้นเมื่อไม่มีสตรีมฟรีหรือบริการปิดหรือปิดเครื่อง

พบการใช้งานมาตรฐานหลายอย่างใน คลาส ThreadPoolExecutor :

  • CallerRunsPolicy - รันงานบนเธรดการโทร
  • AbortPolicy - ส่งข้อยกเว้น;
  • DiscardPolicy - ละเว้นงาน
  • DiscardOldestPolicy - ลบงานที่ยังไม่ได้เริ่มเก่าที่สุดออกจากคิว จากนั้นพยายามเพิ่มงานใหม่อีกครั้ง

บริการเสร็จสิ้น

CompletionServiceเป็นอินเทอร์เฟซบริการที่มีการแยกการเรียกใช้งานแบบอะซิงโครนัสและรับผลลัพธ์ ในการเพิ่มงาน จะมี วิธีการส่งและเพื่อให้ได้ผลลัพธ์ของงานที่เสร็จสมบูรณ์แล้ว จะใช้วิธีการบล็อกTakeและการสำรวจความคิดเห็นที่ไม่บล็อก

ExecutorCompletionServiceเป็นตัวห่อหุ้มคลาสใดๆ ที่ใช้ซ Executorเช่น ThreadPoolExecutorหรือ ForkJoinPool ใช้เมื่อจำเป็นต้องแยกออกจากวิธีการเรียกใช้งานและควบคุมการดำเนินการ

หากมีงานที่ทำเสร็จแล้วเราจะดึงออกมา หากไม่มีงานใด ๆ เราจะพักจนกว่าจะเสร็จสิ้น บริการนี้ใช้ LinkedBlockingQueue เป็นแกนหลัก แต่คุณสามารถผ่านการใช้งาน BlockingQueue ใดๆ ก็ได้