Đề XuấT, 2024

Editor Choice

Sự khác biệt giữa Phương thức ngủ () và Wait () trong Java

Phương thức ngủ và chờ nghe có vẻ giống như thực hiện cùng một nhiệm vụ, nhưng chúng khác nhau nhiều. Phương thức ngủ thuộc về lớp Thread và phương thức chờ thuộc về lớp Object. Sự khác biệt quan trọng nhất giúp phân biệt cả hai là, phương thức ngủ giữ khóa trên đối tượng cho đến khi nó bị gián đoạn hoặc nó kết thúc việc thực hiện. Mặt khác, phương thức chờ giải phóng khóa trên đối tượng để cho các đối tượng khác thực thi cho đến khi được tiếp tục lại bằng phương thức thông báo. Có một số khác biệt hơn giữa phương pháp ngủ và chờ đợi; bạn có thể khám phá chúng trong biểu đồ so sánh hiển thị bên dưới.

Biểu đồ so sánh

Cơ sở để so sánhngủchờ đợi
Căn bảnPhương thức ngủ không giải phóng khóa trên một đối tượng cho đến khi nó bị gián đoạn.Phương thức Wait giải phóng khóa trên đối tượng để cho các đối tượng khác thực thi cho đến khi thông báo hoặc thông báo phương thức ALL được gọi.
Lớp họcPhương thức ngủ được định nghĩa trong lớp Thread.Phương thức Wait được định nghĩa trong lớp Object.
Đã đồng bộ hóaPhương thức ngủ không cần phải được gọi trong bối cảnh Đồng bộ hóa.Phương thức Wait phải được gọi trong bối cảnh Đồng bộ hóa.
Hoàn thànhThực hiện phương thức ngủ được hoàn thành khi một luồng làm gián đoạn nó hoặc thời gian của phương thức ngủ đã hết hạn.Việc thực thi phương thức chờ được hoàn thành khi phương thức notify () hoặc notify ALL () làm gián đoạn nó.
TĩnhPhương pháp ngủ là một phương pháp tĩnh.Phương thức Wait không phải là tĩnh tại sao nó cần đối tượng để gọi nó.
Chấp hànhPhương thức ngủ được thực thi trên luồng hiện tại.Phương thức chờ được thực hiện trên đối tượng.
ngoại lệNgắt ngoại lệIllegalArgumentException, IllegalMonitorStateException, Interrupttedception.

Định nghĩa phương pháp ngủ

Phương thức ngủ là phương thức tĩnh của lớp Thread . Phương thức ngủ được gọi khi một luồng không muốn thực hiện bất kỳ tác vụ nào trong một khoảng thời gian cụ thể. Phương thức ngủ hoàn thành việc thực thi của nó khi hết thời gian của phương thức hoặc nó bị gián đoạn bởi một số luồng khác trong quá trình thực thi. Sau khi phương thức ngủ hoàn thành, luồng lại nhận được trạng thái có thể chạy được. Có hai từ phương pháp ngủ như hình dưới đây.

 công khai tĩnh khoảng trống ngủ (mili giây dài); giấc ngủ trống tĩnh công cộng (mili giây dài và int nano giây); 

Trong hai hình thức trên, bạn có thể quan sát thời gian được đề cập trong cả hai hình thức của phương pháp ngủ. Điều này là do một luồng luôn ngủ trong một thời gian cụ thể được đề cập trong tham số. Phương thức ngủ có thể bị gián đoạn bởi bất kỳ luồng nào khác trong quá trình thực thi; do đó, nó có thể ném sự gián đoạn. Bạn phải lưu ý rằng ngoại lệ được xử lý bằng cách thử / bắt khối hoặc bằng cách ném từ khóa, nếu không, nó sẽ dẫn đến lỗi thời gian biên dịch. Phương thức ngủ giữ khóa trên đối tượng hiện tại trong thực thi và không cho phép bất kỳ đối tượng nào khác thực thi cho đến khi hoàn thành việc thực hiện.

Định nghĩa phương pháp chờ

Chờ là phương thức được định nghĩa trong lớp Object . Phương thức chờ được sử dụng khi một số tác vụ (luồng) đang vật lộn với cùng một tài nguyên tại một thời điểm. Phương thức chờ khi được gọi nó sẽ giải phóng khóa trên đối tượng đã gọi phương thức chờ. Và tạo cơ hội cho một đối tượng khác được thực thi cho đến khi một phương thức thông báo được gọi để tiếp tục khóa trên đối tượng được giải phóng bằng phương thức chờ. Phương pháp chờ có dạng sau.

 chờ đợi(); chờ đợi (mili giây dài); chờ đợi (dài mili giây, int nano giây); 

Như trong ba dạng trên của phương thức chờ, phương thức đầu tiên không có tham số thời gian, điều đó có nghĩa là việc thực thi phương thức chờ sẽ tiếp tục cho đến khi thông báo hoặc phương thức notifyAll không được gọi. Hai phương pháp còn lại có tham số thời gian. Vì vậy, họ sẽ thực thi cho đến khi hết thời gian hoặc cho đến khi thông báo hoặc phương thức noitfy ALL được gọi sớm hơn thời gian hết hạn. Phương pháp chờ có thể ném ngoại lệ. IllegalArgumentException, nếu đối số thời gian trôi qua là âm. IllegalMonitorStateException, nếu luồng hiện tại không sử dụng tài nguyên. Interrupttedception, nếu phương thức chờ bị gián đoạn.

Sự khác biệt chính giữa Phương thức Ngủ và Chờ trong Java

  1. Điểm chính phân biệt phương pháp ngủ và chờ là phương pháp ngủ giữ khóa trên đối tượng cho đến khi nó bị gián đoạn hoặc hết thời gian. Tuy nhiên, phương thức chờ giải phóng khóa trên đối tượng gọi nó và cho các đối tượng khác cơ hội thực thi.
  2. Phương thức ngủ được định nghĩa trong lớp Thread trong khi đó, phương thức chờ được định nghĩa trong lớp Object .
  3. Phương thức ngủ không cần phải được gọi từ bối cảnh đồng bộ. Nhưng phương thức chờ cần được gọi từ đồng bộ hóa.
  4. Phương thức ngủ được đánh thức nếu thời gian của phương thức hết hạn hoặc bị gián đoạn bởi luồng khác. Phương pháp chờ được đánh thức
    khi thông báo hoặc thông báo Tất cả phương thức được gọi.
  5. Phương thức ngủ là phương thức tĩnh trong khi đó, phương thức chờ không phải là phương thức tĩnh .
  6. Phương thức ngủ được thực thi trên luồng hiện tại trong khi đó, phương thức chờ được thực thi trên đối tượng gọi nó.
  7. Ngoại lệ được ném theo phương thức ngủ là InterruptedException trong khi ngoại lệ thrwon bằng phương thức chờ là IllegalArgumentException, IllegalMonitorStateException, InterruptedException .

Phần kết luận:

Khi nhiều luồng muốn sử dụng cùng một tài nguyên, thì phương thức chờ phải được sử dụng. Khi một luồng không muốn thực hiện bất kỳ tác vụ nào, thì phải sử dụng phương thức ngủ.

Top