Sự khác nhau giữa Wait và Sleep trong Java

Cả 2 method wait()sleep() đều được dùng trong lập trình đa luồng mà chúng thường hay sử dụng vào mục đích đồng bộ hoá. Vậy đâu là điểm khác biệt giữa chúng? chúng ta sẽ cùng nhau tìm hiểu trong bài viết này.

Điểm khác nhau giữa wait() và sleep()

wait() là một instance method được sử dụng để đồng bộ hoá. Nó có thể được gọi bởi bất kỳ object nào vì nó đã được định nghĩa sẵn trong Object class. Tuy nhiên chú ý rằng wait() method chỉ được gọi trong synchronized block. Khi wait() method được gọi, thread hiện tại sẽ rơi vào trạng thái chờ cho đến khi một thread khác đánh thức nó, hoặc tự đánh thức sau một khoảng thời gian được chỉ định.

Mặc khác, Thread.sleep() là một static method có thể gọi ở bất cứ đâu. Thread.sleep() sẽ tạm dừng thread hiện tại cho đến khi nó được đánh thức bởi khoảng thời gian được chỉ định. 

Output:

Thread ‘main’ is woken after sleeping for 1 second
Object ‘[email protected]’ is woken after waiting for 1 second

Đánh thức wait() và sleep()

Khi sử dụng Thread.sleep() method nó sẽ tự động đánh thức sau một khoảng thời gian được chỉ định nếu không bị gián đoạn.

Đối với wait(), khi wait() method được gọi, thread hiện tại sẽ rơi vào trạng thái chờ cho đến khi một thread khác gọi notify() hay notifyAll() trên cùng một object. Vì thế wait() method phải được đặt trong monitor object (là một khối code truy cập vào các object được sử dụng bởi nhiều thread, chúng được bảo vệ bởi synchronized để đảm bảo rằng chỉ có 1 thread truy cập vào object tại cùng một thời điểm).

Ví dụ về wait() method

Output: ThreadB has completed. Sum from that thread is: 704982704

Tóm lược

wait()sleep() method có cách sử dụng khác nhau trong khi sleep() sử dụng để quản lý thời gian thực thi của 1 thread thì wait được dùng để đồng bộ hóa các thread. 

Nguồn tham khảo

https://www.baeldung.com/java-wait-and-sleep

Leave a Comment

Your email address will not be published. Required fields are marked *