为什么wait()和notify()属于Object类

关于wait()暂停的是持有锁的对象,所以想调用wait()必须为:对象.wait();

notify()唤醒的是等待锁的对象,调用:对象.notify();

如下:

Object obj = newObject();

synchronized(obj){

    try{  

      obj.wait();

      }catch(Exception e){}

      obj.notify();

  }

注意:wait(),notify(),notifyAll()都必须使用在同步中,因为要对持有监视器(锁)的线程操作。所以要使用在同步中,因为只有同步 才具有锁。

为什么这些操作线程的方法要定义在object类中呢?

简单说:因为synchronized中的这把锁可以是任意对象,所以任意对象都可以调用wait()和notify();所以wait和notify属于Object。

专业说:因为这些方法在操作同步线程时,都必须要标识它们操作线程的锁,只有同一个锁上的被等待线程,可以被同一个锁上的notify唤醒,不可以对不同锁中的线程进行唤醒。

也就是说,等待和唤醒必须是同一个锁。而锁可以是任意对象,所以可以被任意对象调用的方法是定义在object类中。

时间: 2025-01-04 18:44:24

为什么wait()和notify()属于Object类的相关文章

Java基础学习之--理解Object类

看Java API的Object类, 一共11个方法.按使用的频度排名: toString() 这个方法最常用在打日志,定位代码问题. equals()和hashCode(), 这两个方法的使用经典例子是HashMap的源码 public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key == null) return putForNullKey(value); int h

wait(),notify(),notifyAll()用来操作线程为什么定义在Object类中?

这些方法存在于同步中: 使用这些方法必须标识同步所属的锁: 锁可以是任意对象,所以任意对象调用方法一定定义在Object类中. Condition是在java 1.5中才出现的,它用来替代传统的Object的wait().notify()实现线程间的协作,相比使用Object的wait().notify(),使用Condition1的await().signal()这种方式实现线程间协作更加安全和高效.因此通常来说比较推荐使用Condition,在阻塞队列那一篇博文中就讲述到了,阻塞队列实际上是

Object类

Object类是所有类,数组,枚举类的父类,也就是说,java允许把任何类型的对象赋值给Object类型的 变量,当定义一个类是没有石油extends关键字为他显示指定父类时,则该类默认继承Object父类 因为所有的类都是Object类的子类,所有任何java对象都可以调用Object类的方法,Object类提供了如下的 几个常用的方法 1.boolean equals(Object obj): 判断指定对象与该对象是否相等,此处相等的标准是,两个对象是同一个对象 2.protected vo

Object类简单介绍

在java语言中有一个特殊类Object,该类是java.lang类库中的一个类,所有的类都是直接或间接地继承该类而得到的.所以说Object类是所有类的源. 故,我们今天就来好好地了解一下Object类的方法. Object类中有如下的一些方法: protected Object clone(),boolean equals(Object obj),protected void finalize(),Class<?>getClass() int hashCode(),void notify(

Java Object类学习笔记

看下Api文档的一些说明 public class Object Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class. Since: JDK1.0 从JDK1.0就已经存在的元老类,类结构的根,所有类的父类,所有类都实现了这个类的方法,包含

深入研究java.lang.Object类

一.概述:       Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法.在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类.      可以使用类型为Object的变量指向任意类型的对象.      Object类有一个默认构造方法pubilc Object(),在构造子类实例时,都会先调用这个默认构造方法.      Object类的变量只能用作各种值的通用持有者.要对他们进行任何专门的操作,都需要知道它

第10章 接口、继承与多态 Object类

在Java中,所有的类都直接或间接继承了java.lang.Object类.Object类是比较特殊的类,它是所有类的父类,是Java类层中的最高层类.当创建一个类时,总是在继承,除非某个类已经指定要从其他类继承,否则它就是从Java.lang.Object类继承而来. Java中的每个类都源于java.lang.Object类,如:String.Integer等都是继承于Object类,除此之外自定义的类也都继承于Object类,由于所有类都是Object子类,所以在定义类时,省略了exten

object 类

Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法.在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类.      可以使用类型为Object的变量指向任意类型的对象.      Object类有一个默认构造方法pubilc Object(),在构造子类实例时,都会先调用这个默认构造方法.      Object类的变量只能用作各种值的通用持有者.要对他们进行任何专门的操作,都需要知道它们的原始类型并进行类型转

关于object类的两个重要方法以及为什么重写equals一定要重写hashcode()

toString()----------------------输出对象的地址 重写后输出对象的值对象.equals(对象)---------------比较两个对象的内存地址 重写后比较两个对象的属性(总是会重写hashcode()方法,因为实例ab通过equals表现为相等,但是他们存在hashmap中的hashcode依然是不一样的) object类其他的比较重要的方法: getClass():得到类对象(强调类的代码信息,类的对象更强调类代码信息的值)hashcode() :唯一区分对象