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; } }