`

Java Object源码

阅读更多
我从JDK中复制了一份Object的源码出来,把其中的注释去掉了。
public class Object {

    private static native void registerNatives();
    static {
        registerNatives();
    }

    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());
    }

    public final native void notify();

    public final native void notifyAll();

    public final native void wait(long timeout) throws 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 >= 500000 || (nanos != 0 && timeout == 0)) {
            timeout++;
        }

        wait(timeout);
    }

    public final void wait() throws InterruptedException {
        wait(0);
    }


    protected void finalize() throws Throwable { }
}


其中对一些方法加以分析。

1. equals()与hashCode()的问题
  1)equals()相等,那么hashCode()一定是相等的;
  2)hashCode()相等,equals()不一定相等。

2. finalize()在什么时候会出现呢?
  当JVM进行垃圾回收时,会调用复写的finalize()的方法,所以不是你一调用的GC后它就会 
  立马被调用,时刻不是我们所控制的。

3. 线程互斥控制
  线程的同步与互斥是一个很重要的问题,也会有不同的方式来实现。在java中,为解决竞争共享资源时而产生的数据不一致性,java也提供了一些方式来处理,如同步代码块,同步函数。它们的原理是每个对象都会有一个计数器,当进入临界区时,会检查这个计数器,如果为0,说明临界资源没有被使用,自己可以使用;反之,不为0说明有人在使用,自己要等待,同时将计数器加1.

4. notify vs notifyAll
notify和notifyAll都是把某个对象上休息区内的线程唤醒,notify只能唤醒一个,但究竟是哪一个不能确定,而notifyAll则唤醒这个对象上的休息室中所有的线程.

5. wait
注意一点,它会释放锁的。

6.同步与互斥
syschronized是用于互斥的,而wait和nofity是用于同步的。著名的消费者生产者就是使用这两个结合的经典案例。
分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    JAVA上百实例源码以及开源项目源代码

    Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来...

    java源码包4

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java源码包3

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java源码包2

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    corejava9源码

    最新的corejava9源码 ISBN: 978-0137081899 and 978-0137081608 Both volumes are available as e-books: Core Java, Volume I--Fundamentals | Core Java, Volume II--Advanced Features Core Java by Cay S. ...

    基于JAVa的网上商城项目完整源码.zip

    基于JAV的网上商城项目完整源码. import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet....

    Java源码解析之object类

    前些天看到别人讨论阅读源码有什么用这个问题,有一句话说的特别好:学习别人实现某个功能的设计思路,来提高自己的编程水平。本文主要介绍了Java源码解析之object类,需要的朋友可以参考。

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机...

    Java源码小合集:继承和多态相关的例子.rar

    继承和多态的相关Java源码下载,比较散,像覆盖和重载、对象类Object和它的toString()方法、多态性、动态绑定和一般程序设计、数组线性表ArrayList类、final类、方法和变量、数据域和静态方法的隐藏、调用父类的方法...

    javaobject.源码-object2source:将Java对象转换为创建它们的源代码

    源码object2source 一个用于生成源代码的库,该库创建提交到输入的对象的实例。 这意味着使用此库,您可以从JVM内存中反向工程对象。 object2source可以为各种标准Java类型生成数据提供者方法。 如果要生成获取任意...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机...

    java源码:面向对象的脚本语言 ObjectScript.tar.gz

    java源码:面向对象的脚本语言 ObjectScript.tar.gz

    java连接数据库工具类--DBConnection(java源码)

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.naming.Context...

    java一个论坛的源码

    * Constructor of the object. */ public AddAdministratorServlet() { super(); } /** * Destruction of the servlet. */ public void destroy() { super.destroy(); // Just puts "destroy...

    Java 继承 多态方面的实例源码.rar

    Java 继承 多态方面的实例源码,内容方面涉及对象类Object和它的toString()方法、多态性、动态绑定和一般程序设计、数组线性表ArrayList类、final类、方法和变量、数据域和静态方法的隐藏等。。。

    MINA/JAVA游戏服务端源码

    db.dao:顾名思义啦,Database Access Object db.jdbc:jdbc连接池 game:开始游戏 game.message:消息管理者,将客户端的消息传到具体的处理器处理 game.message.handler:消息处理者(功能实现的地方,上接service...

    基于java的开发源码-面向对象的脚本语言 ObjectScript.zip

    基于java的开发源码-面向对象的脚本语言 ObjectScript.zip

    java源码阅读之java.lang.Object

    主要介绍了java源码阅读之java.lang.Object,具有一定借鉴价值,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics