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