วิธีติดตั้ง Callable Interface ใน Java



บทความนี้จะให้ความรู้โดยละเอียดและครอบคลุมเกี่ยวกับวิธีใช้ Callable Interface ใน Java พร้อมตัวอย่าง

โปรแกรมมัลติเธรด Java เป็นพยานถึงการใช้งานที่กว้างขวาง โทรได้และมีอนาคต ภายใต้ความรู้เบื้องต้นเกี่ยวกับเธรดและมัลติเธรดผู้อ่านจะสามารถเข้าใจการสนทนาในบทความนี้ได้ดีขึ้น ดังที่ฉันจะอธิบาย Callable Interface ใน Java ในบทความนี้

สรุปหัวข้อ

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





Callable Interface ใน Java คืออะไร

สำหรับ Java 5 คลาส“ java.util.concurrent” ถูกนำมาใช้ อินเทอร์เฟซที่เรียกได้นี้ถูกนำเข้ามาผ่านแพ็คเกจการทำงานพร้อมกันซึ่งมีลักษณะคล้ายกับอินเทอร์เฟซ Runnable นอกจากนี้ยังสามารถส่งคืนวัตถุใด ๆ และสามารถโยน Exception ได้ อินเทอร์เฟซ Java Callable ใช้ Generics จึงทำให้สามารถส่งคืนอ็อบเจ็กต์ประเภทใดก็ได้ Executor Framework ให้เมธอด submit () เพื่อดำเนินการใช้งาน Callable ในกลุ่มของเธรด ในความเป็นจริง Java Executor Framework ยึดมั่นกับรูปแบบ WorkerThread

java-interfaceในเธรดพูลผู้ใช้สามารถเริ่มต้นเธรดโดยใช้เมธอด Executors.newFixedThreadPool (10) และส่งงานไปตามลำดับ runnable ทำหน้าที่เป็นเป้าหมายของเธรดและเมธอด public void run () ถูกนำไปใช้เพื่อกำหนดภารกิจ สิ่งนี้จะดำเนินการโดยเธรดในเธรดพูล ขึ้นอยู่กับความพร้อมใช้งานของเธรดในพูล Executor Framework จะกำหนดงาน (เป้าหมายที่รันได้) ให้กับเธรดหากมีการใช้เธรดทั้งหมดงานจะต้องหยุดชะงัก หลังจากเธรดเสร็จสิ้นภารกิจหนึ่งแล้วเธรดจะกลับไปที่พูลเป็นเธรดที่พร้อมใช้งานซึ่งพร้อมที่จะรับภารกิจในอนาคต Callable จะคล้ายกับ Runnable และสามารถส่งคืนอ็อบเจ็กต์ประเภทใดก็ได้เมื่อเราต้องการรับผลลัพธ์หรือสถานะจากงาน



การกลับมาของอินเตอร์เฟซที่เรียกได้

Java Callable ส่งคืน java.util.concurrent Java Future เสนอวิธีการยกเลิก () เพื่อกำจัดงาน Callable ที่เกี่ยวข้อง นี่คือเมธอด get () เวอร์ชันที่โอเวอร์โหลดซึ่งเราสามารถระบุเวลาที่แน่นอนเพื่อรอผลลัพธ์ได้ มีประโยชน์ในการหลีกเลี่ยงเธรดปัจจุบันซึ่งอาจถูกบล็อกเป็นเวลานาน โปรดจำไว้ว่าเมธอด get เป็นวิธีซิงโครนัสและจนกว่า callable จะเสร็จสิ้นภารกิจและส่งคืนค่าจะต้องรอให้ callable

นอกจากนี้ยังมีเมธอด“ isDone ()” และ“ isCancelled ()” เพื่อดึงข้อมูลสถานะปัจจุบันของงาน Callable ที่เกี่ยวข้อง พิจารณาตัวอย่างที่ต้องหาผลรวมของตัวเลขทั้งหมดตั้งแต่หนึ่งถึง 100 เราสามารถวน 1 ถึง 100 ตามลำดับและเพิ่มเข้าไปในที่สุด ความเป็นไปได้อีกประการหนึ่งคือการแบ่งและพิชิต ในวิธีนี้เราสามารถจัดกลุ่มตัวเลขในลักษณะที่แต่ละกลุ่มมีสององค์ประกอบ สุดท้ายเราสามารถกำหนดกลุ่มนั้นให้กับกลุ่มของเธรด ดังนั้นแต่ละเธรดจึงส่งคืนผลรวมบางส่วนแบบขนานจากนั้นรวบรวมผลรวมบางส่วนและบวกเข้าด้วยกันเพื่อให้ได้ผลรวมทั้งหมด



คุณสมบัติของ Callable และ Future Class

  • คลาสที่เรียกได้คืออินเทอร์เฟซประเภท SAM ดังนั้นจึงสามารถนำไปใช้ในนิพจน์แลมบ์ดาได้

    java แปลงสองเท่าเป็นจำนวนเต็ม
  • คลาสที่เรียกได้มีเพียงเมธอด 'call ()' วิธีเดียวที่เก็บโค้ดทั้งหมดที่จำเป็นในการรันแบบอะซิงโครนัส

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

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

  • การยกเลิกการคำนวณโดยใช้เมธอด future.cancel () ยังเป็นประโยชน์ในบางแอพพลิเคชั่น

  • Get () เรียกว่าการเรียกบล็อกและจะบล็อกต่อไปจนกว่าการคำนวณจะเสร็จสมบูรณ์

การเปรียบเทียบคลาส Callable และ Runnable

โทรได้ รันได้
เป็นส่วนหนึ่งของ“ java.util.concurrent ' แพ็คเกจตั้งแต่ Java 1.5เป็นส่วนหนึ่งของแพ็คเกจ java.lang ตั้งแต่ Java 1.0
อินเทอร์เฟซที่กำหนดพารามิเตอร์เช่น Callableอินเทอร์เฟซที่ไม่มีพารามิเตอร์
สามารถโยนข้อยกเว้นที่เลือกได้ไม่สามารถโยนข้อยกเว้นที่ตรวจสอบได้
มันมีเมธอดเดียว call () ที่ส่งคืน Type V ซึ่งเหมือนกับพารามิเตอร์อินเทอร์เฟซที่กำหนดไว้ 'Type'ที่นี่มีวิธีการเดียวที่เรียกว่า run () ซึ่งจะคืนค่าเป็นโมฆะ

ด้านล่างนี้เป็นตัวอย่างง่ายๆของคลาสที่เรียกได้ของ Java ที่ใช้งานโดยที่โค้ดส่งคืนชื่อของเธรดเฉพาะซึ่งกำลังดำเนินการภารกิจหลังจากผ่านไปหนึ่งวินาที ที่นี่เราใช้กรอบตัวแยกเพื่อดำเนินการ 100 งานควบคู่ไปกับ Java Future เพื่อผลลัพธ์ของงานที่ส่ง ตัวอย่างแรกคือผลลัพธ์และด้านล่างแสดงรหัส

package com.journaldev.threads import java.util.ArrayList import java.util.Date import java.util.List import java.util.concurrent.Callable import java.util.concurrent.ExecutionException import java.util.concurrent.ExecutorService import java .util.concurrent.Executors import java.util.concurrent คลาสสาธารณะในอนาคต MyCallable ใช้ Callable {@Override public String call () พ่น Exception {Thread.sleep (1000) // ส่งคืนชื่อเธรดที่เรียกใช้งานที่เรียกได้นี้คืน Thread.currentThread () .getName ()} public static void main (String args []) {// รับ ExecutorService จากคลาสยูทิลิตี้ Executors ขนาดเธรดพูลคือ 10 ExecutorService executor = Executors.newFixedThreadPool (10) // สร้างรายการเพื่อเก็บ Future วัตถุที่เกี่ยวข้องกับ Callable Listlist = ArrayList ใหม่() // สร้างอินสแตนซ์ MyCallable Callable callable = MyCallable ใหม่ () สำหรับ (int i = 0 i<100 i++){ //submit Callable tasks to be executed by thread pool Future future = executor.submit(callable) //add Future to the list, we can get return value using Future list.add(future) } for(Future fut : list){ try { //print the return value of Future, notice the output delay in console // because Future.get() waits for task to get completed System.out.println(new Date()+ '::'+fut.get()) } catch (InterruptedException | ExecutionException e) { e.printStackTrace() } } //shut down the executor service now executor.shutdown() } } 

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

สิ่งสำคัญและสำคัญที่นักพัฒนาหลายคนพลาดคือการปิด ExecutorService ExecutorService มีความสำคัญและถูกสร้างขึ้นด้วยองค์ประกอบเธรดเพิ่มเติม โปรดทราบว่า JVM จะหยุดเฉพาะเมื่อเธรดที่ไม่ใช่ daemon ทั้งหมดหยุดทำงาน ดังนั้นการปิดบริการตัวดำเนินการจะป้องกันไม่ให้ JVM หยุดทำงาน

เพื่อที่จะบอกเซอร์วิสตัวดำเนินการว่าไม่จำเป็นต้องรันเธรดเราควรปิดบริการ

มีสามวิธีในการเรียกการปิดระบบ:

  • การปิดระบบเป็นโมฆะ () - สิ่งนี้เริ่มต้นการปิดระบบอย่างเป็นระเบียบซึ่งมีการดำเนินงานที่ส่งไปก่อนหน้านี้ แต่ไม่มีการยอมรับงานใหม่
  • ปิดรายการตอนนี้ () - พยายามหยุดงานที่กำลังดำเนินการทั้งหมดหยุดการประมวลผลงานที่รอดำเนินการและส่งคืนรายการงานที่รอการดำเนินการ
  • เป็นโมฆะ awaitTermination () - สิ่งนี้จะบล็อกต่อไปจนกว่างานทั้งหมดจะเสร็จสิ้นการดำเนินการหลังจากการร้องขอการปิดระบบหรือการหมดเวลาเกิดขึ้น นอกจากนี้ยังบล็อกเมื่อเธรดปัจจุบันถูกขัดจังหวะ ทั้งหมดขึ้นอยู่กับว่างานใดมาก่อน

ด้วยเหตุนี้เราจึงมาถึงตอนท้ายของบทความ Callable Interface ใน Java ฉันหวังว่าคุณจะเข้าใจในอนาคตและอินเตอร์เฟสที่เรียกได้ใน Java

ตรวจสอบไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ซึ่งมีเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 250,000 คนกระจายอยู่ทั่วโลก หลักสูตรการฝึกอบรมและการรับรอง Java J2EE และ SOA ของ Edureka ออกแบบมาสำหรับนักเรียนและผู้เชี่ยวชาญที่ต้องการเป็น Java Developer

รายการเรียง c ++

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของบล็อก 'Callable Interface in Java' และเราจะติดต่อกลับโดยเร็วที่สุด