Це дуже просте запитання, оскільки обидва ці методи мають абсолютно різне використання.
Основна відмінність полягає в тому, щоб чекати, коли вимкнути замок або монітор, поки сплячий режим не відпустить блокування чи монітор під час очікування. Зачекання використовується для міжпотокового зв'язку, тоді як сон використовується для введення пауз при виконанні.
Це було просто чітке і основне пояснення, якщо ви хочете більше, ніж потім, продовжуйте читати.
У випадку, коли wait()
нитка методу переходить у стан очікування, і він не повернеться автоматично, поки ми не викличемо notify()
метод (або notifyAll()
якщо у вас більше одного потоку в стані очікування і ви хочете пробудити весь цей потік). І вам потрібно синхронізувати або блокування об'єкта або блокування класу для отримання доступу до wait()
або notify()
або notifyAll()
методам. І ще одне - wait()
метод використовується для міжпотокового зв’язку, тому що якщо нитка переходить у стан очікування, вам знадобиться інша нитка, щоб пробудити цю нитку.
Але у випадку sleep()
цього - це метод, який використовується, щоб затримати процес протягом декількох секунд або потрібного часу. Тому що вам не потрібно провокувати будь-який метод notify()
чи notifyAll()
метод повернути цю нитку назад. Або вам не потрібен інший потік, щоб передзвонити цей потік. Наприклад, якщо ви хочете, щоб щось сталося через кілька секунд, наприклад, в грі після повороту користувача, ви хочете, щоб користувач почекав, поки комп'ютер грає, тоді ви можете згадати про sleep()
метод.
І ще одна важлива різниця, яку часто задають в інтерв'ю: sleep()
належить до Thread
класу і wait()
належить до Object
класу.
Це всі відмінності між sleep()
і wait()
.
І між обома методами існує подібність: вони обидва перевіряються оператором, тому вам потрібно спробувати catch або кидок, щоб отримати доступ до цих методів.
Я сподіваюся, що це вам допоможе.