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ờ đợi đượ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 trong hoạt động.
Chìa khóa 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 Java chương trình ra lệnh cho luồng hiện tại đợi cho đến khi 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.
Thực tế thời gian luồng nào sẽ ngủ tùy thuộc vào bộ lập lịch và bộ hẹn 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.
- https://pdfs.semanticscholar.org/51fd/24ae444910fd39b117bb3044a12591f038fa.pdf
- https://dl.acm.org/doi/pdf/10.1145/289524.289572
Cập nhật lần cuối: ngày 31 tháng 2023 năm XNUMX
Sandeep Bhandari có bằng Cử nhân Kỹ thuật Máy tính của Đại học Thapar (2006). Ông có 20 năm kinh nghiệm trong lĩnh vực công nghệ. Anh rất quan tâm đến các lĩnh vực kỹ thuật khác nhau, bao gồm hệ thống cơ sở dữ liệu, mạng máy tính và lập trình. Bạn có thể đọc thêm về anh ấy trên trang sinh học.
Bài viết làm sáng tỏ một cách hiệu quả sự khác biệt giữa phương pháp ngủ và chờ, đưa ra sự so sánh rõ ràng và ngắn gọn. Các chi tiết về đồng bộ hóa và mở khóa đặc biệt hữu ích.
Bài viết đã làm rất tốt việc phân định sự khác biệt giữa phương pháp ngủ và chờ. Thông tin về đồng bộ hóa và mở khóa được trình bày rõ ràng và chính xác.
Lời giải thích chi tiết về phương pháp ngủ và chờ thật tuyệt vời. Bài viết này là một tài sản quý giá cho bất kỳ ai đang tìm cách nâng cao hiểu biết của mình về các khái niệm Java cơ bản này.
Đây là sự so sánh toàn diện về các phương thức ngủ và chờ trong Java. Bài viết nêu rõ những điểm khác biệt chính và cung cấp bảng so sánh hữu ích để tham khảo.
Phân tích chi tiết về phương pháp ngủ và chờ rất sâu sắc. Việc hiểu được các sắc thái và chức năng của các phương thức này trong lập trình Java là rất có giá trị.
Tôi nhận thấy lời giải thích về phương pháp ngủ và chờ rất đầy đủ thông tin và chính xác. Bảng so sánh đặc biệt hữu ích trong việc tóm tắt những đặc điểm tương phản của các phương pháp này.
Bài viết đưa ra sự so sánh kỹ lưỡng giữa các phương thức ngủ và chờ trong Java. Tôi đánh giá cao những giải thích chi tiết, mang lại những hiểu biết sâu sắc có giá trị về chức năng của chúng.
Tôi thấy bài viết có nhiều thông tin và được xây dựng tốt. Việc giải thích về các phương thức ngủ và chờ sẽ giúp bạn hiểu rõ hơn về cách sử dụng và ý nghĩa của chúng trong Java.
Bài viết đưa ra sự so sánh chi tiết về các phương thức ngủ và chờ, cung cấp những hiểu biết toàn diện về hành vi và chức năng của chúng trong lập trình Java.
Bài viết này là một nguồn tài nguyên quý giá để hiểu các phương thức ngủ và chờ trong Java. Các giải thích rất chi tiết và bảng so sánh cung cấp tài liệu tham khảo thuận tiện để hiểu sự khác biệt giữa các phương pháp này.
Tôi có cùng quan điểm, Vmorgan. Bảng so sánh cung cấp cái nhìn tổng quan rõ ràng về sự khác biệt và mô tả chi tiết giúp nâng cao hiểu biết về các phương pháp ngủ và chờ.
Cảm ơn bạn cho bài viết. Tôi đánh giá cao lời giải thích chi tiết về sự khác biệt giữa phương pháp ngủ và chờ. Thật tốt khi hiểu rõ cách chúng hoạt động trong chương trình Java.
Giải thích của bạn về khái niệm này có cấu trúc rất tốt và dễ hiểu. Tôi đồng ý rằng điều quan trọng là phải hiểu rõ các phương pháp cơ bản này.
Sự khác biệt giữa phương pháp ngủ và chờ đã được giải thích kỹ lưỡng trong bài viết này. Tôi thấy lời giải thích về hành vi của phương thức chờ trong quá trình đồng bộ hóa đặc biệt rõ ràng.
Tôi đồng ý, Freya. Bài viết cung cấp giải thích rõ ràng và chính xác về hành vi của phương thức chờ, giúp bạn dễ hiểu chức năng của nó hơn trong Java.
Mô tả của bài viết về các hành vi và kiểu trả về của phương thức ngủ và chờ có nhiều thông tin. Hiểu những khác biệt này là điều cần thiết để đa luồng hiệu quả trong Java.
Tôi thấy bài viết có nhiều thông tin và sâu sắc. Việc phân tích chuyên sâu về các phương thức ngủ và chờ góp phần rất lớn vào việc hiểu được các sắc thái và ý nghĩa của chúng trong Java.
Bài viết cung cấp một phân tích toàn diện về các phương thức sleep và wait trong Java. Các phần giải thích được sắp xếp hợp lý và góp phần rất lớn vào việc hiểu sâu hơn về các phương pháp cơ bản này.