• Java之wait()/sleep()和notify()/notifyAll()


    好了,来总结下wait()/sleep()和notify()/notifyAll()。

    1. wait()/sleep():
      wait()属于Thread类,它的作用是让访问当前对象的线程进入等待,它必须在关键字Synchronized下使用。wait()的线程必须被notify()/notifyAll()唤醒后才能运行,且在等待期间线程会放弃对象锁,只有唤醒后再去尝试对象锁。
      sleep()方法指定了程序暂停执行指定的时间,让出cpu给其他线程,但在等待期间线程不会放弃对象锁,当指定的时间到了又会自动唤醒,恢复运行状态。
    2. notify()/notifyAll():
      notify()/notifyAll()都是Object对象用于通知处在等待该对象的线程的方法。
      void notify(): 唤醒一个正在等待该对象的线程。
      void notifyAll(): 唤醒所有正在等待该对象的线程。
      两者的最大区别在于:
      notifyAll使所有原来在该对象上等待被notify的线程统统退出wait的状态,变成等待该对象上的锁,一旦该对象被解锁,他们就会去竞争。
      notify他只是选择一个wait状态线程进行通知,并使它获得该对象上的锁,但不惊动其他同样在等待被该对象notify的线程们,当第一个线程运行完毕以后释放对象上的锁,此时如果该对象没有再次使用notify语句,即便该对象已经空闲,其他wait状态等待的线程由于没有得到该对象的通知,继续处在wait状态,直到这个对象发出一个notify或notifyAll,它们等待的是被notify或notifyAll,而不是锁。
  • 相关阅读:
    IOS整体代码复习一
    IOS复习UIActionSheet&UIAlertView
    IOS复习Plist文件的读取和写入
    IOS复习UITextfield&UILabel
    iOS中判断两个圆是否重叠
    iOS指针回调函数
    ios函数指针
    iOS分区
    ios指针第二天
    iOS指针第一天
  • 原文地址:https://www.cnblogs.com/Sherlock-J/p/12926091.html
Copyright © 2020-2023  润新知