`

java, Object.wait()

    博客分类:
  • java
 
阅读更多
java Object 类中 notify() ,notifyAll() ,wait()

Java Monitor 从两个方面来支持线程之间的同步,即:互斥执行与协作。 Java 使用对象锁 ( 使用 synchronized 获得对象锁 ) 保证工作在共享的数据集上的线程互斥执行 , 使用 notify/notifyAll/wait 方法来协同不同线程之间的工作。这些方法在 Object 类上被定义,会被所有的 Java 对象自动继承。
实质上,Java 的 Object 类本身就是监视者对象,Java 语言对于这样一个典型并发设计模式做了内建的支持。不过,在 Java 里,我们已经看不到了我们在 C++ 一节所讨论的区域锁与条件变量的概念。下图很好地描述了 Java Monitor 的工作机理。



线程如果获得监视锁成功,将成为该监视者对象的拥有者。在任一时刻内,监视者对象只属于一个活动线程 (Owner) 。拥有者线程可以调用 wait 方法自动释放监视锁,进入等待状态。

1. wait() 方法:
要调用一个对象的wait()方法,只有当前线程获取了这个对象的锁,换句话说一定要在这个对象的同步方法或以这个对象为参数的同步块中.当一个线程调用了wait() 方法后,这个线程就进入了这个对象的休息室(waitset),这是一个虚拟的对象,但JVM中一定存在这样的一个数据结构用来记录当前对象中有哪些程线程在等待。然后它就会释放锁,让其它线程来获取这个锁.
这个线程只能等待其它线程调用notity[All]来唤醒.
但是如果调用的是有参数的wait(time)方法,则线程会在休息室中等待这个时间后自动唤醒.
class Test{
    public synchornized void test(){
      //获取条件,int x 要求大于100;
      while(x < 100)  // 注意这里是while 每次被唤醒后,还是要检查条件是否满足
        wait();
      perform();  // 执行操作
    }
}

2. notify() notifyAll() 方法:
这两个方法都是把某个对象上休息区内的线程唤醒,notify只能唤醒一个,但究竟是哪一个不能确定,而notifyAll则唤醒这个对象上的休息室中所有的线程.
一般为了保险起见,我们在绝对多数时候应该使用notifiAll(),除非你明确知道只唤醒其中的一个线程.
  • 大小: 29.6 KB
分享到:
评论

相关推荐

    Object.wait()与Object.notify()的用法详细解析

    以下是对java中Object.wait()与Object.notify()的用法进行了详细的分析介绍,需要的朋友可以过来参考下

    java面试宝典.docx

    1. Thread.sleep() 和 Object.wait() Thread.sleep() 和 Object.wait() 都可以抛出 InterruptedException。这个异常是不能忽略的,因为它是一个检查异常(checked exception) ,对于非运行时异常(checked exception...

    tomcat 安全规范(tomcat安全加固和规范)

    tomcat是一个开源Web服务器,基于Tomcat的Web运行效率高,可以在一般的硬件平台上流畅运行,因此,颇受Web站长的青睐。不过,在默认配置下其存在一定的安全隐患,可被恶意攻击

    java Object wait方法详细介绍

    主要介绍了java Object wait方法详细介绍的相关资料,需要的朋友可以参考下

    后端JAVA虚拟机JVM调优必备工具

    IBM Thread and Monitor Dump Analyzer for Java专业JVM调优工具 一、使用方法 1.使用java -jar启动程序 2.... 3.... 4....对象等待中,Object.wait()  7.阻塞,Blocked(重点关注)  8.停止,Parked

    Java中ReentrantLock的使用.docx

    重入锁ReentrantLock 相对来说是synchronized、Object.wait()和Object.notify()方法的替代品(或者说是增强版),在JDK5.0的早期版本,重入锁的性能远远好于synchronized,但从JDK6.0开始,JDK在synchronized上做了...

    Linux 中awk 提取包含某个关键字的段落

    前提 AWK是一种处理文本文件的语言,是一个强大的文本分析工具。 本文将使用命令awk将具有某个关键字的段落提取出来。... at java.lang.Object.wait(Native Method) - waiting on &lt;0x00000000d670

    Thinking in Java 4th Edition

    Java SE5 and SE6 .................. 2 Java SE6 ......................................... 2 The 4th edition........................ 2 Changes .......................................... 3 Note on the ...

    Java 中Object的wait() notify() notifyAll()方法使用

    主要介绍了Java 中Object的wait() notify() notifyAll()方法使用的相关资料,需要的朋友可以参考下

    Java Network Programming 3rd Edition By Elliotte Rusty Harold 2004

    But Wait! There's More! Chapter 2. Basic Network Concepts Section 2.1. Networks Section 2.2. The Layers of a Network Section 2.3. IP, TCP, and UDP Section 2.4. The Internet Section 2.5. ...

    java 锁 Lock接口详解.docx

    这些变量在用法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的功能。需要特别指出的是,单个 Lock 可能与多个 Condition 对象关联。为了避免兼容性问题,Condition 方法的名称与对应的 Object 版本中...

    Java 面试宝典

    创建了几个 String Object? 二者之间有什么区别? ......................................................................................................................................... 24 34、String ...

    java核心知识点整理.pdf

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    Java的Object类讲解案例代码 equals()、hashCode()、finalize()、clone()、wait()

    这个源码资源是关于Java中的Object类的讲解案例代码。Object类是所有Java类的根类,它定义了一些常用的方法,例如equals()、hashCode()、toString()等。本案例代码将详细展示Object类的使用方法,并提供一些实际场景...

    Java 9 Revealed: For Early Adoption and Migration

    There is extensive coverage of new Java 9 features, such as the new layout of the modular JDK/JRE runtime image, new convenience factory methods for creating collections, the new spin-wait hints ...

    JAVA高级程序设计测试题含答案.docx

    Object C. Thread D. Frame E. 示例 第4题 【单选题】【2.00分】【概念理解】 若要将一个类对象能被整体写入文件,则定义该类时必须实现下列哪个接口 [单选题] * A. Runnable B. ActionListener C. WindowsAdapter ...

    Java高级程序设计测试含答案.docx

    非流类(正确答案) java中用于创建文件对象的类是() [单选题] * A.File(正确答案) B.Object C.Thread D.Frame 若要将一个类对象能被整体写入文件,则定义该类时必须实现下列哪个接口() [单选题] * A....

    Java面试题.docx

    40、在Java中wait和seelp方法的不同 41-50题 41、谈谈wait/notify关键字的理解 42、什么导致线程阻塞?线程如何关闭? 43、如何保证线程安全? 44、如何实现线程同步? 45、线程间操作List 46、谈谈对...

Global site tag (gtag.js) - Google Analytics