• sleep()方法和wait()方法的异同点


    为什么 wait() 要放在同步代码块中?

    步方法就是在方法前加关键字 synchronized,然后被同步的方法一次只能有一个线程进sleep()方法和wait()法的异同点

    相同之处:

    sleep()方法和wait()方法都是使当前线程进入休眠状态。 两者都可以响应**interrupt****中断,也就是说在线程调用方法进入休眠状态后,如果收到中断信号,都可以进行响应并中断,且都可以抛出InterruptException 异常。

    不同之处:

     1,所属类不同

    sleep() 方法属于 Thread 类的静态方法,而 wait() 方法属于Object类。
    为什么 wait() 定义在 object 里,*而不是 Thread’//‘里?
    Java 的锁是对象级别的锁,而不是线程级别,所以 wait()
    Object 的方法。 sleep() 是线程级别的,所以存在于
    Thread 类中。

    2,唤醒方式不同

    sleep() 方法必须传递一个超时时间的参数,过了这个时间后线程就会自动唤醒,进入就绪状态; wait() 方法可以不传递参数,此时线程会进入永久休眠,直到另一个线程调用notify() 方法或者 notifyAll() 方法之后,休眠的线程才会被唤醒。也就是说sleep() 方法可以 主动唤醒,而不传参的wait() 方法只能被动唤醒。

    3,语法使用不同

    入,其他线程等待;防止在 cpu 切换线程的时候,其它线程先执行了notify() ,后执行 wait() ,线程永远无法被唤醒, 所以要将wait() 放在同步代码块。

    4,释放锁资源不同

    在线程调用 wait() 方法时,线程会主动 释放 锁并进入等待状态; 而线程在调用sleep() 方法时,线程 不会释放锁   。 也就是说sleep() 方法是抱着锁睡的。

    5,线程进入状态不同:

    线程调用sleep() 方法会进入 TIMED_WAITING 有时限等待状态;而调用无参数的wait() 方法,线程会进入 WAITING 无时
    限等待状态。
  • 相关阅读:
    【毕业设计】图像畸变校正 (以车牌识别为例) - 机器视觉
    Say0l的安全开发-代理扫描工具-Sayo-proxyscan【红队工具】
    从入门到入土的Vue2+webpack
    重构代码用warning提醒调用者API发生变化
    LiveData源码赏析 —— 基本使用
    C++快速幂(递归)
    CSS详细基础(五)选择器的优先级
    毕业设计网站项目的开发流程
    ETCD数据库源码分析——etcdserver bootstrap初始化存储
    Andriod Studio小游戏
  • 原文地址:https://blog.csdn.net/qq_62975017/article/details/133384983