zoukankan      html  css  js  c++  java
  • 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,而不是锁。
  • 相关阅读:
    Python程序执行时的不同电脑路径不同问题
    Python写的计算器程序(主要目的在于熟悉下正则表达式)
    占位符
    selenium自动化测试浏览器驱动安装(属于转载文章)
    python的pip升级问题
    索引
    视图
    事务
    引擎
    约束
  • 原文地址:https://www.cnblogs.com/Sherlock-J/p/12926091.html
Copyright © 2011-2022 走看看