• sleep是Thread方法,而wait是Object的方法
  • sleep不需要强制和synchronized配合使用,但wait需要和synchronized一起用
  • sleep在睡眠的同时,不会释放对象锁,但wait在等待的时候会释放对象锁
  • 进入的状态是一致的,都是【TIME-WAITING】,这里是针对wait含参方法来说的,无参方法是【WAITING】状态

    wait会释放锁:

    ```java public class SleepAndWait {

    static final Object lock = new Object();

    public static void main(String[] args) {

    1. new Thread(()->{
    2. System.out.println("获得锁");
    3. try {
    4. lock.wait();
    5. } catch (InterruptedException e) {
    6. e.printStackTrace();
    7. }
    8. },"t1").start();
    9. synchronized (lock){
    10. System.out.println("获得锁");
    11. }

    } }

  1. <a name="ihyZW"></a>
  2. ####
  3. <a name="RZJ5q"></a>
  4. #### sleep不会释放锁:
  5. ```java
  6. public class SleepAndWait {
  7. static final Object lock = new Object();
  8. public static void main(String[] args) {
  9. new Thread(()->{
  10. System.out.println("获得锁");
  11. try {
  12. Thread.sleep(20000);
  13. } catch (InterruptedException e) {
  14. e.printStackTrace();
  15. }
  16. },"t1").start();
  17. synchronized (lock){
  18. System.out.println("获得锁");
  19. }
  20. }
  21. }