ngủ () là một phương thức được sử dụng để giữ tiến trình trong vài giây hoặc thời gian bạn muốn nhưng trong trường hợp luồng phương thức Wait () chuyển sang trạng thái chờ và nó sẽ không tự động quay lại cho đến khi chúng ta gọi thông báo () hoặc thông báoTất cả ().
Sự khác biệt chính là Wait () giải phóng khóa hoặc màn hình trong khi ngủ () không giải phóng bất kỳ khóa hoặc màn hình nào trong khi chờ. Nói chung, Wait được sử dụng để liên lạc giữa các luồng trong khi chế độ ngủ được sử dụng để giới thiệu tạm dừng khi thực thi.
Thread.s ngủ () sẽ gửi chủ đề hiện tại vào trạng thái Hiện tại không chạy được trong một số thời gian. Chuỗi giữ cho các màn hình mà nó thu được - tức là nếu luồng hiện đang ở trong một khối hoặc phương thức được đồng bộ hóa thì không có luồng nào khác có thể vào khối hoặc phương thức này. Nếu một luồng khác gọi t.interrupt () thì nó sẽ đánh thức luồng ngủ. Lưu ý rằng ngủ là một phương thức tĩnh, có nghĩa là nó luôn ảnh hưởng đến luồng hiện tại (phương thức đang thực thi phương thức ngủ). Một lỗi phổ biến là gọi t.s ngủ () trong đó t là một luồng khác nhau; thậm chí sau đó, nó là chủ đề hiện tại sẽ ngủ, không phải chủ đề t.
object.wait () gửi luồng hiện tại vào trạng thái không chạy Run , như ngủ (), nhưng với một nút xoắn. Chờ được gọi trên một đối tượng, không phải là một chủ đề; chúng tôi gọi đối tượng này là đối tượng khóa. Trước khi lock.wait () được gọi, luồng hiện tại phải đồng bộ hóa trên đối tượng khóa; Wait () sau đó phát hành khóa này và thêm chủ đề vào danh sách chờ đợi của Google được liên kết với khóa. Sau đó, một luồng khác có thể đồng bộ hóa trên cùng một đối tượng khóa và gọi lock.notify (). Điều này đánh thức các chủ đề ban đầu, chờ đợi. Về cơ bản, Wait () / notify () giống như ngủ () / interrupt (), chỉ có luồng hoạt động không cần con trỏ trực tiếp đến luồng ngủ mà chỉ với đối tượng khóa được chia sẻ.
synchronized(LOCK) {
Thread.sleep(1000); // LOCK is held
}
synchronized(LOCK) {
LOCK.wait(); // LOCK is not held
}
Hãy phân loại tất cả các điểm trên:
Call on:
- Wait (): Gọi một đối tượng; luồng hiện tại phải đồng bộ hóa trên đối tượng khóa.
- ngủ (): Gọi trên một chủ đề; luôn luôn thực hiện chủ đề.
Synchronized:
- Wait (): khi được đồng bộ hóa nhiều luồng truy cập cùng một đối tượng.
- ngủ (): khi nhiều chủ đề được đồng bộ hóa chờ ngủ qua chủ đề ngủ.
Hold lock:
- Wait (): nhả khóa để các đối tượng khác có cơ hội thực thi.
- ngủ (): giữ khóa ít nhất t lần nếu hết thời gian chỉ định hoặc ai đó bị gián đoạn.
Wake-up condition:
- chờ (): cho đến khi cuộc gọi thông báo (), notifyAll () từ đối tượng
- ngủ (): cho đến khi ít nhất là hết thời gian hoặc gọi ngắt ().
Usage:
- ngủ (): để đồng bộ hóa thời gian và;
- Wait (): để đồng bộ hóa đa luồng.
Tham chiếu: khác biệt sleep
vàwait