sleep()不释放资源,wait()释放资源
也就是sleep的时候线程如果有锁住什么资源 这个时候是不可以被访问的 而wait可以

解决方案 »

  1.   

    sleep是暂停wait是等待。两个东西完全不一样。
    简单的说是sleep只是让程序停一会,而wait是等待一定时间或等待到其结束。
      

  2.   

    请问wait()在哪里呀?我怎么找不着呀
      

  3.   

    sleep和wait都是使线程暂时停止执行的方法
    ,但它们有很大的不同,sleep是线程类Thread 的方法,
    它是使当前线程暂时睡眠,可以放在任何位置。
    而wait是Object类的方法,它是使当前线程暂时放弃对象的使用权进行等待,
    必须放在同步方法或同步块里。
    Sleep使用的时候,线程并不会放弃对象的使用权,即不会释放对象锁,所以在同步方法或同步块中使用sleep,一个线程访问时,其他的线程也是无法访问的。
    而wait是会释放对象锁的,就是当前线程放弃对象的使用权,让其他的线程可以访问。
    线程执行wait方法时,需要另一个线程调用notify进行唤醒。
    而sleep只是暂时休眠一定时间,时间到了之后,自动恢复运行,不需另外的线程唤醒。 
      

  4.   

    sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级
    (b)正在运行的线程因为其它原因而阻塞。
    wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
      

  5.   

    sleep方法是让当前线程等待特定时间(由sleep参数决定)
    而wait方法是等待知道别的线程给你发信号,你接收到信号后可以继续往下走
      

  6.   

    sleep()方法是使线程停止一段时间的方法。
    在sleep 时间间隔期满后,线程不一定立即恢复执行。
    这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行.
    除非(a)“醒来”的线程具有更高的优先级(b)正在运行的线程因为其它原因而阻塞。
    wait()是线程交互时,如果线程对一个同步对像x 发出一个wait()调用
    该线程会暂停执行,被调对像进入等待状态,直到被唤醒或等待时间到。
      

  7.   

    最简单的解释:
    Wait()是等待别人释放资源
    Sleep()是自己占用资源,去做等待~
      

  8.   

    从操作系统的角度讲,os会维护一个ready queue(就绪的线程队列)。并且在某一时刻cpu只为ready queue中位于队列头部的线程服务。 但是当前正在被服务的线程可能觉得cpu的服务质量不够好,于是提前退出,这就是yield。 或者当前正在被服务的线程需要睡一会,醒来后继续被服务,这就是sleep。  sleep方法不推荐使用,可用wait。 线程退出最好自己实现,在运行状态中一直检验一个状态,如果这个状态为真,就一直运行,如果外界更改了这个状态变量,那么线程就停止运行。 sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。 sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。 当调用wait()后,线程会释放掉它所占有的“锁标志”,从而使线程所在对象中的其它synchronized数据可被别的线程使用。
      

  9.   

    sleep方法是让当前线程等待特定时间(由sleep参数决定)
    而wait方法是等待知道别的线程给你发信号,你接收到信号后可以继续往下走