Giao diện Runnable trong Java - Nằm lòng về giao diện Java Runnable
13/08/2021 01:54
Trong bài viết này, chúng ta sẽ tìm hiểu giao diện Runnable trong Java, đây là một phần tử cốt lõi của Java khi làm việc với các luồng. Bất kỳ lớp nào trong Java có ý định thực thi các luồng phải triển khai giao diện Runnable. Trong bài viết này, chúng ta sẽ cung cấp cho bạn một cái nhìn đầy đủ về giao diện Runnable của Java, cùng với các ví dụ. Vì vậy, chúng ta hãy bắt đầu hướng dẫn với phần giới thiệu về giao diện Runnable trong Java.
- Khái niệm giao diện Runnable trong Java
- Phương thức giao diện Runnable run ()
- Các bước tạo chuỗi mới bằng giao diện Runnable
- Triển khai giao diện Runnable trong Java
- Mã để triển khai giao diện Runnable trong Java:
- Điều gì xảy ra khi Runnable trong Java gặp một ngoại lệ?
- Lớp luồng so với giao diện Runnable trong Java
Khái niệm giao diện Runnable trong Java
Giao diện Runnable của Java có trong gói java.lang. Đây là một loại giao diện chức năng cung cấp một khuôn mẫu chính cho các đối tượng mà chúng ta muốn thực hiện bằng cách sử dụng các luồng.
Chúng ta biết rằng có hai cách để bắt đầu một Thread - luồng mới: Mở rộng lớp Thread và triển khai giao diện Runnable. Không cần phải mở rộng hoặc phân lớp một lớp Thread khi chúng ta có thể thực hiện một tác vụ bằng cách chỉ ghi đè phương thức run () của giao diện Runnable. Do đó, giao diện Runnable cung cấp một cách để một lớp hoạt động mà không cần mở rộng lớp Thread. Chúng ta cần khởi tạo một đối tượng của Thread và chuyển nó vào làm đích.
Chúng ta chủ yếu triển khai giao diện Runnable khi không sử dụng phương thức nào khác ngoài phương thức run (). Giao diện Runnable chỉ định nghĩa một phương thức run () không có đối số và giữ mã cần được thực thi bởi luồng. Do đó, các lớp triển khai giao diện Runnable cần ghi đè phương thức run ().
>>> Tham khảo: Khóa học lập trình Java
Phương thức giao diện Runnable run ()
Giao diện runnable có một phương thức không xác định run (). run () có kiểu trả về là void và nó không có đối số. Bảng bên dưới hiển thị tóm tắt của phương thức run ():
Phương thức |
Mô tả |
public void run () |
Phương thức run () không có đối số. Khi đối tượng của một lớp thực thi giao diện Runnable tạo một luồng, thì phương thức run () sẽ được gọi trong luồng và phương thức này thực thi riêng biệt. |
Các bước tạo chuỗi mới bằng giao diện Runnable
Có các bước sau để tạo một chuỗi mới bằng giao diện Runnable:
- Bước đầu tiên là tạo một lớp Java cài đặt giao diện Runnable.
- Bước thứ hai là ghi đè phương thức run () của giao diện Runnable () trong lớp.
- Bây giờ, truyền đối tượng Runnable như một tham số cho phương thức khởi tạo của đối tượng của lớp Thread trong khi tạo nó. Bây giờ, đối tượng này có khả năng thực thi lớp Runnable.
- Cuối cùng, gọi phương thức bắt đầu của đối tượng Thread.
>>> Đọc thêm: Giao diện so sánh trong Java - Tìm hiểu thêm về giao diện so sánh Java
Triển khai giao diện Runnable trong Java
Triển khai giao diện Runnable là cách dễ nhất để tạo một luồng. Chúng ta có thể tạo một luồng trên bất kỳ đối tượng nào bằng cách triển khai giao diện Runnable. Để triển khai Runnable, chúng ta chỉ phải triển khai phương thức run ().
Trong phương thức này, có một đoạn mã mà chúng ta muốn thực thi trên một luồng đồng thời. Chúng ta có thể sử dụng các biến, các lớp khởi tạo và thực hiện một hành động trong phương thức run () giống như cách mà luồng chính thực hiện. Luồng vẫn hoạt động cho đến khi phương thức này trả về. Phương thức run () thiết lập một điểm vào một luồng mới.
Mã để triển khai giao diện Runnable trong Java:
package com.techvidvan.runnableinterface;
public class RunnableDemo {
public static void main(String[] args) {
System.out.println("From main() method: " + Thread.currentThread().getName());
System.out.println("Creating Runnable Instance");
Runnable runnable = new Runnable() {@Override
public void run() {
System.out.println("From run() method: " + Thread.currentThread().getName());
}
};
System.out.println("Creating a Thread Instance");
Thread thread = new Thread(runnable);
System.out.println("Launching the thread...");
thread.start();
}
}
Output:
From main() method: main
Creating Runnable Instance
Creating a Thread Instance
Launching the thread…
From run() method: Thread-0
>>> Đọc thêm: Interface trong Java - Tìm hiểu về giao diện trong Java
Điều gì xảy ra khi Runnable trong Java gặp một ngoại lệ?
Giao diện Runnable không thể ném các ngoại lệ đã kiểm tra nhưng nó có thể ném RuntimeException từ phương thức run (). Bộ xử lý ngoại lệ của luồng xử lý các ngoại lệ chưa được giải quyết nếu JVM không thể xử lý hoặc bắt chúng. Nó cũng in dấu vết ngăn xếp và kết thúc luồng chương trình.
import java.io.FileNotFoundException;
public class RunnableDemo {
public static void main(String[] args) {
System.out.println("The main thread is: " + Thread.currentThread().getName());
Thread t1 = new Thread(new RunnableDemo().new RunnableImplementation());
t1.start();
}
private class RunnableImplementation implements Runnable {
public void run() {
System.out.println(Thread.currentThread().getName() + ", executing the run() method!");
try {
throw new FileNotFoundException();
}
catch(FileNotFoundException e) {
System.out.println("Must catch an exception here!");
e.printStackTrace();
}
}
}
}
Output:
The main thread is: main
Thread-0, executing the run() method!
Must catch an exception here!
java.io.FileNotFoundException
at RunnableDemo$RunnableImplementation.run(Example.java:21)
at java.lang.Thread.run(Thread.java:748)
Kết quả ở trên cho thấy lớp Runnable không thể ném các ngoại lệ đã kiểm tra là FileNotFoundException trong trường hợp này. Nó sẽ xử lý các ngoại lệ đã kiểm tra trong phương thức run () nhưng JVM sẽ tự động xử lý các ngoại lệ RuntimeExceptions.
Lớp luồng so với giao diện Runnable trong Java
Có nhiều điểm khác biệt giữa lớp Thread và giao diện Runnable trên cơ sở hiệu suất, mức sử dụng bộ nhớ và thành phần của chúng.
- Có chi phí của các phương thức bổ sung bằng cách mở rộng lớp luồng. Chúng sử dụng bộ nhớ dư thừa hoặc gián tiếp, thời gian tính toán hoặc các tài nguyên khác.
- Vì chúng ta chỉ có thể mở rộng một lớp trong Java, do đó, nếu chúng ta mở rộng lớp Thread, thì chúng ta không thể mở rộng bất kỳ lớp nào khác. Do đó, chúng ta nên triển khai giao diện Runnable để tạo một luồng.
- Giao diện Runnable làm cho mã linh hoạt hơn. Và, nếu chúng ta đang mở rộng một chuỗi, thì mã của chúng ta sẽ chỉ nằm trong một chuỗi. Trong khi đó, nếu chúng ta triển khai giao diện chạy được, chúng ta có thể chuyển nó trong các dịch vụ trình thực thi khác nhau hoặc vào môi trường đơn luồng.
- Việc bảo trì mã trở nên dễ dàng nếu chúng ta triển khai giao diện Runnable.
Kết luận: Trên đây là một số kiến thức về giao diện Runnable trong Java, giao diện này sẽ vô cùng hữu ích trong việc tạo luồng trong Java. Hy vọng bạn có thể đã hiểu khái niệm về giao diện Runnable trong Java và cách sử dụng nó một cách hữu ích. Tìm hiểu thêm về Java và các ngôn ngữ lập trình khác qua các khóa học lập trình tại Viện công nghệ thông tin T3H.
Nguồn: Techvidvan