美文网首页
Java多线程:wait(),notify(),notifyAl

Java多线程:wait(),notify(),notifyAl

作者: CieloSun | 来源:发表于2017-04-10 18:42 被阅读0次

    1. wait(),notify(),notifyAll()

    这三个方法是用于线程间通信的基础方法,但实际上,它们不是Thread类中的方法,而是Object类中的本地方法。因此,理论上任何对象都可以调用者三个方法。当然,实际编程中,只有同步锁对象调用这三种方法,才能完成多线程的线程间通信。通常情况下,如果是synchronized修饰的方法,这个对象是this,如果是其他特定的变量,则为被修饰的变量。

    调用wait(),notify(),notifyAll()方法的线程必须获取同步锁对象的锁,即有对象的控制权,否则程序会报IllegalMonitorStateException。

    2. wait()

    2.1. wait()

    使当前线程进入到阻塞状态直到其他线程通过notify()/notifyAll()来唤醒。

    2.2. wait(long timeout)

    在wait()的基础上,设置了一个超时时间,超过这个时间会自主唤醒。

    2.3. wait(long timeout, int nanos)

    由于wait(long timeout)中的timeout参数的单位是毫秒,该方法提供了更加精确的设置,但是并不是精确到纳秒,而是如果纳秒数大于nanos设定的值,则算作一毫秒。

    3. notify()

    唤醒在此同步锁对象上等待的单个线程。如果有多个线程都在此同步锁对象上等待,则会任意选择其中某个线程进行唤醒操作,只有当前线程放弃对同步锁对象的锁定,才有可能执行被唤醒的线程。

    4. notifyAll()

    和notify()的区别为唤醒同步锁对象上等待的所有线程。

    5. 参考文章

    Java总结篇系列:Java多线程(三)

    Java总结篇系列:java.lang.Object

    相关文章

      网友评论

          本文标题:Java多线程:wait(),notify(),notifyAl

          本文链接:https://www.haomeiwen.com/subject/oyheattx.html