JavaRush /Blog Java /Random-VI /Nghỉ giải lao #159. Vòng đời của một thread trong Java. G...

Nghỉ giải lao #159. Vòng đời của một thread trong Java. Giao diện chức năng và phương thức mặc định trong Java 8

Xuất bản trong nhóm

Vòng đời của một luồng trong Java

Nguồn: Medium Bài viết này thảo luận về các trạng thái vòng đời khác nhau của các luồng trong Java. Nghỉ giải lao #159.  Vòng đời của một thread trong Java.  Giao diện chức năng và phương thức mặc định trong Java 8 - 1Vòng đời của một luồng trong Java chủ yếu bao gồm các chuyển đổi sang các trạng thái khác nhau, bắt đầu bằng việc sinh ra luồng và kết thúc bằng việc kết thúc luồng. Một thread sẵn sàng chạy khi nó được tạo và khởi động bằng cách gọi phương thức start() trên lớp Thread . Khi phương thức sleep() hoặc wait() của lớp Thread được gọi , luồng sẽ không sử dụng được. Để quản lý các luồng theo chương trình, điều quan trọng là phải xác định trạng thái của luồng. Hãy hiểu vòng đời của một luồng Java xác định trạng thái của nó như thế nào. Đây là những gì tài liệu Java nói về điều này: Một luồng là một đường dẫn thực thi chương trình có thể đi vào một trong năm trạng thái trong vòng đời của nó:
  1. Mới
  2. Có thể chạy được
  3. Đang chạy
  4. Bị chặn
  5. Chết
1. Mới (trạng thái sơ sinh) xảy ra khi bạn tạo một đối tượng Thread trong lớp Thread. Dòng chảy được tạo ra và ở trạng thái “sơ sinh”. Nghĩa là, khi một luồng được tạo, nó sẽ chuyển sang trạng thái mới, nhưng phương thức start() vẫn chưa được gọi trên cá thể. 2. Có thể chạy được. Trạng thái này có nghĩa là luồng đã sẵn sàng để chạy. Khi phương thức start() được gọi trên một luồng mới, nó sẽ sẵn sàng bắt đầu. Ở trạng thái này, luồng đợi cho đến khi bộ xử lý khả dụng (thời gian CPU). Nghĩa là, luồng trở thành một hàng đợi (chuỗi) các luồng đang chờ được thực thi. 3. Đang chạy (trạng thái chạy). Thực thi có nghĩa là bộ xử lý đã phân bổ một khe thời gian để luồng thực thi. Đây là trạng thái mà luồng thực hiện chức năng thực tế của nó. 4. Bị chặn (trạng thái bị chặn). Một luồng ở trạng thái bị chặn khi nó tạm dừng, ngủ hoặc chờ một thời gian để thỏa mãn một điều kiện nhất định. 5. Trạng thái chết. Tình trạng này xảy ra khi phương thức run() hoàn thành việc thực thi các lệnh. Thread tự động dừng hoặc chuyển sang trạng thái chết. Nói cách khác, khi một thread thoát khỏi phương thức run() , nó sẽ chấm dứt hoặc chết.

Giao diện chức năng và phương thức mặc định trong Java 8

Nguồn: Medium Trong bài viết này, bạn sẽ tìm hiểu về một số thay đổi được giới thiệu trong Java 8, cụ thể là các giao diện chức năng và các phương thức mặc định.

Phương pháp mặc định là gì?

Chúng ta biết rằng các lớp trừu tượng có thể có các phương thức trừu tượng và không trừu tượng (các phương thức được triển khai), nhưng các giao diện trừu tượng 100% (tất cả các phương thức này chỉ có chữ ký và không có phần triển khai). Nhưng điều gì sẽ xảy ra nếu chúng ta cần một giao diện thay vì một lớp và chức năng chung giữa tất cả các lớp được triển khai? Bởi vì khi đó mã triển khai được lặp đi lặp lại trong mỗi lớp triển khai giao diện. Để tránh điều này, Java 8 đã thêm từ khóa mặc định . Nếu chúng ta có một phương thức được triển khai trong một giao diện thì từ khóa mặc định phải được gán cho phương thức đó, nếu không chúng ta sẽ gặp lỗi thời gian chạy.

Giao diện chức năng là gì?

Các giao diện chức năng không gì khác ngoài các giao diện với một phương thức trừu tượng và bất kỳ số phương thức tiêu chuẩn hoặc tĩnh nào. Một ví dụ về giao diện chức năng là Comparable, có một phương thức trừu tượng là so sánhTo() . Đổi lại, Runnable có phương thức run() , v.v. Chúng ta cũng có thể biểu diễn một giao diện chức năng bằng cách sử dụng chú thích @FunctionalInterface. Nó đảm bảo rằng một giao diện chỉ có một phương thức trừu tượng:
@FunctionalInterface
public interface MyfunctionalInterface{
   public void myabstractmethod();
   public static void method1(){
       //Имплементация
    }
   public default void method2(){
       //Имплементация
    }
}

Các loại giao diện chức năng

Người tiêu dùng - lấy một đối số và không trả về gì cả.
  • Ba biến thể của Consumer là DoubleConsumer, IntConsumer và LongConsumer (tùy thuộc vào loại đối số mà chúng chấp nhận).
  • Bi-Consumer - nhận hai đối số và không trả về gì.
Vị ngữ - nhận một đối số và trả về giá trị boolean.
  • Ba biến thể của Predicate là DoublePredicate, IntPredicate và LongPredicate (tùy thuộc vào loại đối số mà chúng chấp nhận).
  • Bi-Predicate - nhận hai đối số và trả về giá trị boolean.
Hàm - nhận một đối số và trả về một giá trị.
  • Nhiều phiên bản của hàm có sẵn dưới dạng loại đối số, trong đó int , longdouble được sử dụng phổ biến nhất.
  • Bi-Function - nhận hai đối số và trả về một giá trị.
  • Các toán tử Unary và Binary thực hiện Function và Bi-Function lần lượt nhưng điều kiện bổ sung ở đây là đầu vào và đầu ra phải giống hệt nhau và cùng loại.
Nhà cung cấp - Không chấp nhận bất kỳ đầu vào nào nhưng trả về một giá trị duy nhất. Các phiên bản khác nhau của Nhà cung cấp: BooleanSupplier, IntSupplier, LongSupplier và DoubleSupplier, trong đó kiểu trả về là kiểu gốc tương ứng.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION