Java có một số phương thức để thực hiện một số hành động nhất định.
Một phương thức là một nhóm mã chỉ chạy khi nó được gọi; và có thể hoặc không thể trả về kết quả.
Các phương pháp như ngủ và chờ được sử dụng cho đa luồng. Cả hai đều tạm dừng và gửi luồng vào trạng thái chờ nhưng có sự khác biệt lớn về chức năng.
Các nội dung chính
- “Ngủ” là trạng thái nghỉ ngơi trong đó cơ thể và tâm trí không hoạt động, trong khi “Chờ” là ở yên một chỗ hoặc trì hoãn hành động cho đến khi một sự kiện cụ thể xảy ra.
- “Ngủ” là một chức năng tự nhiên và cần thiết của cơ thể, trong khi “Chờ” là một hành động tự nguyện có thể chọn hoặc tránh.
- “Ngủ” gắn liền với ban đêm, trong khi “Chờ” có thể xảy ra bất cứ lúc nào trong ngày.
Ngủ vs Chờ
Sự khác biệt giữa phương thức sleep() và wait() là phương thức sleep() được sử dụng trong chương trình để tạm dừng việc thực thi luồng hiện tại trong một khoảng thời gian cụ thể trong khi phương thức wait() được sử dụng trong chương trình để tạm dừng hoặc tạm dừng chuỗi hiện tại cho đến khi các phương thức cụ thể được gọi.

Trong quá trình sử dụng phương thức ngủ, chuỗi hiện tại không mất quyền sở hữu màn hình.
Ngủ là một phương thức tĩnh và là một phần của chuỗi lớp. Sau khi thời gian chờ kết thúc, luồng sẽ quay trở lại trạng thái có thể chạy được ban đầu.
Nó đảm bảo sử dụng hoàn toàn CPU trong khi chờ đợi.
Trong khi đó phương thức wait() được sử dụng trong chương trình Java để ra lệnh cho luồng hiện tại đợi cho đến khi một luồng khác không được gọi cho đối tượng đó.
Sau đó, luồng tiếp tục thực hiện khi nó có được quyền kiểm soát màn hình.
Nó không phải là một phương thức tĩnh, không giống như chế độ ngủ và là một phần của lớp đối tượng.
Bảng so sánh
Các thông số so sánh | Ngủ | Đợi |
---|---|---|
Lớp | Phương thức ngủ là một phần của lớp luồng | Phương thức chờ đợi là một phần của lớp đối tượng |
Loại phương pháp | Ngủ là một phương pháp tĩnh | Chờ không phải là một phương pháp tĩnh |
kỹ thuật gọi | Phương thức ngủ có thể được gọi từ bên ngoài ngữ cảnh được đồng bộ hóa | Phương thức đợi chỉ có thể được gọi từ bối cảnh được đồng bộ hóa |
Khóa phát hành | Phương thức ngủ không giải phóng khóa trên đối tượng, trong thời gian chờ đã chỉ định, trong khi đồng bộ hóa | Phương thức chờ giải phóng khóa trên đối tượng, để có cơ hội thực thi, trong quá trình đồng bộ hóa |
Tờ khai | chế độ ngủ void tĩnh công khai() | public cuối cùng void wait() |
Ngủ là gì?
Chuỗi ngủ () là một phương thức tĩnh trong chương trình Java tạm dừng chuỗi hiện tại và đặt nó ở trạng thái chờ trong một khoảng thời gian quy định.
Khi trạng thái chờ và thời gian kết thúc, điều kiện luồng được thay đổi thành trạng thái có thể chạy được. Và sau đó đợi CPU thực hiện tiếp.
Mục đích của phương pháp này là tạo ra độ trễ trong vài giây trong chương trình và đồng thời tận dụng tối đa CPU.
Nếu hệ thống đang bận hoặc quá tải thì thời gian chờ hoặc tạm dừng sẽ nhiều hơn, ngược lại sẽ ít hơn hoặc bằng thời gian thực tế.
Kiểu trả về của phương thức ngủ có thể nói là void, vì nó không trả về bất kỳ giá trị nào.
Chủ đề ngủ không làm mất màn hình hoặc khóa chủ đề mà nó đã có được.
Trong mọi trường hợp, nếu giấc ngủ bị xáo trộn, luồng sẽ ném Interrupted_Exception.
Khoảng thời gian thực tế mà luồng sẽ ngủ tùy thuộc vào bộ lập lịch và bộ tính giờ hệ thống là một phần của hệ điều hành.
Cú pháp của phương thức ngủ là – public static void sleep(long mili giây)
chế độ ngủ void tĩnh công khai (mili giây dài, int nano giây)
Ở đây mili giây và nano giây là thời gian mà luồng sẽ ngủ.

Chờ đợi là gì?
Wait() là một phương thức được sử dụng để liên lạc giữa các luồng.
Bất cứ khi nào luồng wait() được sử dụng, cuộc gọi hoặc luồng hiện tại sẽ bị tạm dừng và tạm dừng cho đến khi các phương thức như notify() hoặc notifyAll() được gọi trong hệ thống.
phương thức notify() sẽ đánh thức các luồng đã chỉ định trong khi notifyAll() có thể áp dụng cho mọi luồng.
Khi được đồng bộ hóa, phương thức chờ sẽ từ bỏ khóa tài nguyên.
Không có giá trị trả về của phương thức Wait, do đó có thể nói rằng nó trả về void.
Hai ngoại lệ của phương thức Chờ là Interrupted_Exception (khi luồng hiện tại bị gián đoạn trong khi ngủ) và IllegalMonitorStateException (khi luồng hiện tại không phải là chủ sở hữu của đối tượng trên màn hình).
Phương thức Wait là một phần của lớp đối tượng. Phương pháp này chỉ được áp dụng và có thể được gọi trên một khối được đồng bộ hóa.
Phương pháp chờ đặt màn hình bị treo hoặc bị khóa miễn phí trong quá trình đồng bộ hóa.
Và phương thức Chờ dành riêng cho phép nhiều luồng được đồng bộ hóa lần lượt truy cập vào cùng một đối tượng.
Cú pháp của phương thức Wait là – public final void wait()

Sự khác biệt chính giữa Ngủ và Chờ
- Phương thức Ngủ làm cho luồng ở chế độ ngủ trong một khoảng thời gian cụ thể và được chỉ định, trong thời gian chờ được chỉ định trừ khi hết hạn hoặc bị gián đoạn, trong khi phương thức Chờ làm cho luồng ở chế độ ngủ cho đến khi các phương thức như notification() hoặc notificationAll() được gọi.
- Phương thức Ngủ thực thi trên một luồng, trong khi phương thức Chờ thực thi trên một đối tượng.
- Phương thức Ngủ được sử dụng để đồng bộ hóa thời gian, trong khi phương thức Chờ được sử dụng để đồng bộ hóa nhiều luồng.
- Trong chuỗi Chờ, nhiều chuỗi được đồng bộ hóa có thể truy cập cùng một đối tượng một cách liền kề, trong khi ở chuỗi Ngủ, nhiều chuỗi được đồng bộ hóa phải chờ cho chuỗi ngủ của chuỗi hiện tại kết thúc.
- Phương thức Chờ đặt khóa hoặc màn hình miễn phí, trong khi phương thức Ngủ không đặt màn hình miễn phí trong khi ngủ hoặc chờ luồng hiện tại.
