zoukankan      html  css  js  c++  java
  • java中的sleep()和wait()的区别

    1. sleep()方法:是属于Thread类中的。

      wait()方法:是属于Object类中的;两者都会造成线程的阻塞(让出cpu使用权)

    2. sleep()方法是在指定的时间让当前线程暂停执行,让出cpu该其他线程,但是他的状态依然保持(就是执行到了哪行代码就在哪行停留着,等到超时或者调用interrupt()来终止),当指定的时间到了又会自动恢复运行状态,从阻塞状态变为就绪状态

     wait()是无限制等待,即当前线程永久暂停,直到其他线程调用 该对象notify()或 notifyAll()才能解除这种状态,不过由于它是在同步上下文中的,所以还要拿到同步锁才能从阻塞状态变为就绪状态,运行状态时还是从原有wait()下一行开始执行(为wait感到悲哀)

    3. sleep()不会释放对象锁(也意味在同步方法或同步块使用sleep方法,其他线程无法执行同步上下文的内容)

      wait()方法会放弃对象锁

    4. sleep()可以在任意地方使用

      wait()只能在同步上下文中使用(同步块或同步方法)

    PS:wait(),notify(),notifyAll()这三兄弟只能在同步上下文中使用。

    5. sleep是静态方法,作用于当前的执行的线程

     wait是实例方法,作用于当前的执行的线程(这一点很多人都说作用当前对象,我认为是错的,正确应该是当前的执行的线程会进入到等待持当中)

  • 相关阅读:
    git命令总结
    Junit
    zookeeper--概述
    NIO与Socket
    分区分表
    ThreadLocal
    垃圾收集器
    垃圾收集算法
    主从复制
    Redis--集群
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/13730255.html
Copyright © 2011-2022 走看看