Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่างอินเทอร์เฟซ Runnable และ Callable ใน java


Runnable และ Callable ทั้งอินเทอร์เฟซการทำงาน คลาสที่ใช้อินเทอร์เฟซเหล่านี้ได้รับการออกแบบให้ดำเนินการโดยเธรดอื่น

สามารถเริ่มต้นเธรดด้วย Ruunable และมีสองวิธีในการเริ่มเธรดใหม่:หนึ่งคือโดยคลาสย่อยของคลาสเธรด และอีกวิธีหนึ่งคือการใช้อินเทอร์เฟซ Runnable

คลาสเธรดไม่มีคอนสตรัคเตอร์สำหรับ callable ดังนั้นเราควรใช้คลาส ExecutorService เพื่อรันเธรด

ซีเนียร์ เลขที่ คีย์ รันได้ โทรได้
1
แพ็คเกจ
เป็นของ Java.lang
มันเป็นของ java.util.concurrent
2
การสร้างเธรด
เราสามารถสร้างเธรดโดยส่งผ่าน runnable เป็นพารามิเตอร์
เราไม่สามารถสร้างเธรดโดยส่ง callable เป็น parameter
3
ประเภทการส่งคืน
Ruunable ไม่คืนค่าอะไรเลย
Callable สามารถส่งคืนผลลัพธ์ได้
4.
วิธีการ
มันได้ run() method
มีเมธอด call()
5
การดำเนินการจำนวนมาก
ไม่สามารถใช้กับงานจำนวนมากได้
สามารถใช้สำหรับการทำงานจำนวนมากโดยเรียกใช้ invokeAll()

ตัวอย่างของ Runnable

public class RunnableExample implements Runnable {
   public void run() {
      System.out.println("Hello from a Runnable!");
   }
   public static void main(String args[]) {
      (new Thread(new RunnableExample())).start();
   }
}

ตัวอย่าง Callable

public class Main {
   public static void main(String args[]) throws InterruptedException, ExecutionException {
      ExecutorService services = Executors.newSingleThreadExecutor();
      Future<?> future = services.submit(new Task());
      System.out.println("In Future Object" + future.get());
   }
}
import java.util.concurrent.Callable;

public class Task implements Callable {

   @Override
   public String call() throws Exception {
      System.out.println("In call");
      String name = "test";
      return name;
   }
}