Computer >> Máy Tính >  >> Lập trình >> Java

Sự khác biệt giữa giao diện Runnable và Callable trong java

Runnable và Callable cả hai giao diện chức năng. Các lớp đang triển khai các giao diện này được thiết kế để được thực thi bởi một luồng khác.

Luồng có thể được bắt đầu bằng Ruunable và chúng là hai cách để bắt đầu một luồng mới:một là bằng cách phân lớp con lớp Thread và một cách khác là triển khai giao diện Runnable.

Lớp luồng không có hàm tạo để có thể gọi, vì vậy chúng ta nên sử dụng lớp ExecutorService để thực thi luồng.

Sr. Không. Phím Runnable Có thể gọi được
1
Gói
Nó thuộc về Java.lang
Nó thuộc về java.util.concurrent
2
Tạo chuỗi
Chúng ta có thể tạo luồng bằng cách chuyển runnable làm tham số.
Chúng tôi không thể tạo chuỗi bằng cách chuyển có thể gọi làm tham số
3
Loại Trả lại
Ruunable không trả về bất cứ thứ gì
Có thể gọi có thể trả về kết quả
4.
Phương pháp
Nó có phương thức run ()
Nó có phương thức call ()
5
Thực thi Hàng loạt
Nó không thể được sử dụng để thực thi hàng loạt tác vụ
Nó có thể được sử dụng để thực thi hàng loạt tác vụ bằng cách gọi invokeAll ().

Ví dụ về 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();
   }
}

Ví dụ về 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;
   }
}