Object类注释

package java.lang;
public class Object {
/**为了让JVM找到你的本地函数,它们必须以某种方式命名。例如,对于java.lang.Object.registerNatives,相应的C函数名为Java_java_lang_Object_registerNatives。**/
    private static native void registerNatives();
    static {
        registerNatives();
    }
    // 返回this的运行时类Object。
    public final native Class<?> getClass();
    // 返回对象的哈希码值。
    public native int hashCode();
    // 比较是否是同一个对象
    public boolean equals(Object obj) {
        return (this == obj);
    }
    //  创建并返回此对象的副本。
    protected native Object clone() throws CloneNotSupportedException;
    // 返回对象的字符串表示
    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    /*
    唤醒正在此对象的监视器上等待的单个线程。
    如果有任何线程在该对象上等待,则选择其中一个唤醒。
    该选择是任意的,并且可以根据实现情况进行选择。
    线程通过调用wait方法之一在对象的监视器上等待。
	在当前线程放弃对该对象的锁定之前,唤醒的线程将无法继续。
	唤醒的线程将以通常的方式与任何其他可能正在主动竞争以与此对象进行同步的线程竞争。
	例如,被唤醒的线程在作为锁定该对象的下一个线程时没有任何可靠的特权或劣势。
	此方法只能由作为该对象的监视器的所有者的线程调用。
	线程可以通过以下三种方式之一成为对象监视器的所有者:
	通过执行该对象的同步实例方法。
	通过执行synchronized在对象上同步的语句的主体。
	对于类型Class,的对象,请执行该类的同步静态方法。
	一次只能有一个线程拥有对象的监视器。
	抛出:
	IllegalMonitorStateException -如果当前线程不是此对象的监视器的所有者。
	*/
    public final native void notify();
    /*
    唤醒正在此对象的监视器上等待的所有线程。线程通过调用wait方法之一在对象的监视器上等待 。
	在当前线程放弃对该对象的锁定之前,唤醒的线程将无法继续。
	唤醒的线程将以通常的方式与可能正在主动竞争以与此对象进行同步的任何其他线程竞争。
	例如,被唤醒的线程在成为锁定该对象的下一个线程时没有任何可靠的特权或劣势。
	此方法只能由作为该对象的监视器的所有者的线程调用.
	请参见该notify方法,以获取有关线程可以成为监视器所有者的方式的描述。
	抛出:
	IllegalMonitorStateException -如果当前线程不是此对象的监视器的所有者。
    */
    public final native void notifyAll();
    //使当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法,或者经过指定的时间。
    /*
    使当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法,或者经过指定的时间。
	当前线程必须拥有该对象的监视器。
	此方法使当前线程(称为T)将自己置于该对象的等待集中,然后放弃对该对象的所有同步声明。 出于线程调度目的,线程T被禁用,并且在发生以下四种情况之一之前一直处于休眠状态:
	其他一些线程notify为此对象调用方法,并且线程T恰好被任意选择为要唤醒的线程。
	其他一些线程notifyAll为此对象调用方法。
	其他某个线程中断 线程牛逼。
	指定的实时量或多或少已经过去。timeout但是,如果 为零,则不考虑实时性,线程只是等待直到通知。
	然后 将线程T从该对象的等待集中删除,并重新启用线程调度。然后,它以通常的方式与其他线程竞争在对象上进行同步的权利。一旦它获得了对象的控制权,它对对象的	所有同步声明都将恢复到原样-即,wait 调用该方法时的情况。然后,线程T从wait方法的调用返回。因此,从wait方法返回 时,对象和线程的同步状态与调用T该wait方法时的状态完全相同。
	线程也可以唤醒,而不会被通知,中断或超时,即所谓的虚假唤醒。尽管在实践中这种情况很少发生,但是应用程序必须通过测试应该导致线程唤醒的条件来防范它,并在条件不满足时继续等待。换句话说,等待应该总是在循环中发生,就像这样:
     同步(obj){
         而(<条件不成立>)
             obj.wait(timeout); 
         ... //执行适合条件的动作
     }
   (有关此主题的更多信息,请参阅Doug Lea的“ Java并行编程(第二版)”(Addison-Wesley,2000年)中的3.2.3节,或Joshua Bloch的“有效的Java编程语言指南”(Addison-卫斯理,2001)。
	如果当前线程在等待之前或等待期间被任何线程中断,则 InterruptedException抛出。如上所述,直到该对象的锁定状态恢复之前,不会引发此异常。
	请注意,该wait方法将当前线程放入此对象的等待集中,因此只会解锁该对象;否则,此方法将变为可用状态。在线程等待时,当前线程可以在其上同步的所有其他对象保持锁定。
	此方法只能由作为该对象的监视器的所有者的线程调用。请参见该notify方法,以获取有关线程可以成为监视器所有者的方式的描述。
	参数:
	timeout -等待的最长时间(以毫秒为单位)。
	抛出:
	IllegalArgumentException -如果超时值为负。
	IllegalMonitorStateException -如果当前线程不是对象监视器的所有者。
	InterruptedException-如果任何线程在当前线程等待通知之前或期间中断了当前线程。引发此异常时,将清除当前线程的中断状态。
    */
    public final native void wait(long timeout) throws InterruptedException;
    //使当前线程等待,直到另一个线程调用该对象的 notify()方法或该 notifyAll()方法,或者某个其他线程中断了当前线程,或者经过了一定的实时时间。
    /*
    使当前线程等待,直到另一个线程调用该对象的 notify()方法或该 notifyAll()方法,或者某个其他线程中断了当前线程,或者经过了一定的实时时间。
	此方法类似于wait一个参数的方法,但是它可以更好地控制放弃通知之前等待通知的时间。实时量(以纳秒为单位)由下式给出:
 	1000000 *超时+ nanos
	在所有其他方面,此方法wait(long)与一个参数的方法具有相同的作用。特别 wait(0, 0)是与的含义相同wait(0)。
	当前线程必须拥有该对象的监视器。线程释放此监视器的所有权,并等待直到以下两个条件之一发生:
	另一个线程通过调用notify方法或notifyAll方法来通知在此对象的监视器上等待的线程唤醒。
	由timeout 毫秒加纳nanos秒参数指定的超时时间已经过去。
	然后,线程等待,直到它可以重新获得监视器的所有权并恢复执行。
	与一个参数版本中一样,可能会产生中断和虚假唤醒,并且应始终在循环中使用此方法:
     同步(obj){
         而(<条件不成立>)
             obj.wait(timeout,nanos); 
         ... //执行适合条件的动作
     }
	此方法只能由作为该对象的监视器的所有者的线程调用。请参见该notify方法,以获取有关线程可以成为监视器所有者的方式的描述。
	参数:
	timeout -等待的最长时间(以毫秒为单位)。
	nanos -附加时间,以纳秒为单位,范围为0-999999。
	抛出:
	IllegalArgumentException -如果超时值是负数或nanos的值不在0-999999范围内。
	IllegalMonitorStateException -如果当前线程不是此对象的监视器的所有者。
	InterruptedException-如果任何线程在当前线程等待通知之前或期间中断了当前线程。引发此异常时,将清除当前线程的中断状态。
    */
    public final void wait(long timeout, int nanos) throws InterruptedException {
        if (timeout < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }
        if (nanos < 0 || nanos > 999999) {
            throw new IllegalArgumentException("nanosecond timeout value out of range");
        }
        if (nanos > 0) {
            timeout++;
        }
        wait(timeout);
    }
    //使当前线程等待,直到另一个线程调用 该对象notify()的 notifyAll()方法。
    /*
    使当前线程等待,直到另一个线程调用 该对象notify()的 notifyAll()方法。换句话说,此方法的行为就像完全执行call一样wait(0)。
	当前线程必须拥有该对象的监视器。线程释放此监视器的所有权,并等待直到另一个线程通知该对象的监视器上等待的线程通过调用notify方法或 notifyAll方法唤醒。	  然后线程等待,直到它可以重新获得监视器的所有权并恢复执行。
	与一个参数版本中一样,可能会产生中断和虚假唤醒,并且应始终在循环中使用此方法:
     同步(obj){
         而(<条件不成立>)
             obj.wait(); 
         ... //执行适合条件的动作
     }
 	此方法只能由作为该对象的监视器的所有者的线程调用。请参见该notify方法,以获取有关线程可以成为监视器所有者的方式的描述。
	抛出:
	IllegalMonitorStateException -如果当前线程不是对象监视器的所有者。
	InterruptedException-如果任何线程在当前线程等待通知之前或期间中断了当前线程。引发此异常时,将清除当前线程的中断状态。
    */
    public final void wait() throws InterruptedException {
        wait(0);
    }
	//当垃圾回收确定不再有对该对象的引用时,由垃圾回收器在对象上调用。
    /*
    当垃圾回收确定不再有对该对象的引用时,由垃圾回收器在对象上调用。子类覆盖finalize处理系统资源或执行其他清除的方法。
	的一般约定finalize是,当Java™虚拟机确定不再有任何手段可以使尚未死亡的任何线程访问该对象时,将调用该协议,除非已采取了行动通过终结一些准备完成的对象或类。
	该finalize方法可以采取任何措施,包括使该对象可再次用于其他线程。finalize但是,通常的目的是在清除对象之前将其清除。例如,代表输入/输出连接的对象的finalize方法可能会执行显式I / O事务,以在永久丢弃该对象之前中断连接。
	finalize类 的方法不Object执行任何特殊操作;它只是正常返回。的子类 Object可能会覆盖此定义。
	Java编程语言不保证哪个线程将为finalize任何给定对象调用该方法。但是,可以保证,在调用finalize时,调用finalize的线程将不持有任何用户可见的同步锁。如果finalize方法抛出未捕获的异常,则该异常将被忽略,并且该对象的终结将终止。
	在finalize为对象调用该方法之后,在Java虚拟机再次确定不再有任何方法可以由尚未死亡的任何线程访问该对象之前,不采取任何进一步的措施,包括通过以下方式采取的措施:准备完成的其他对象或类,此时可以将其丢弃。
	finalizeJava虚拟机永远不会为任何给定对象多次调用 该方法。
	该finalize方法引发的任何异常都会导致该对象的终结被终止,但否则将被忽略。
	抛出:
	Throwable-Exception
	*/
    protected void finalize() throws Throwable { }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值