`

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源码包2

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

    java源码文档src

    例如,`java.lang`包提供了基础的类型如`String`、`Object`以及系统相关的类,`java.util`包包含集合框架、日期时间处理、泛型等工具类,而`javax`包则包含了Java扩展功能,如Swing组件和Java EE相关的API。...

    java JDK 源码

    4. **java**: 这是最基础的包,包含Java语言的核心类,如`java.lang`有Object、String、System等基本类型和类,`java.util`提供了集合框架、日期时间、随机数生成等功能,`java.io`则涉及输入输出流操作。...

    JAVA短信验证源码DEMO

    4. **SOAP协议**:通常,Java中的WebService使用SOAP(Simple Object Access Protocol)作为数据交换格式。SOAP消息是XML格式的,包含请求和响应信息。在DEMO中,`MessageSender.java`可能负责构造SOAP请求,然后...

    Java1.6源码

    例如,`Object`类是所有Java类的父类,包含了诸如`toString()`、`hashCode()`和`equals()`等方法的实现;`String`类是不可变字符串的实现,其源码解析可以帮助理解字符串的拼接、比较等操作。 2. **集合框架**:...

    java 1.8源码

    Java 1.8源码是Java编程语言在1.8版本的开源代码,它揭示了Java平台核心组件的内部工作原理。源码包含了Java开发工具包(JDK)中的各种核心类库,如`launcher`(启动器)、`org`、`javax`、`java`和`com`等目录下的...

    从Java走向Java EE 源码.rar

    通过对这些源码的学习,读者可以深入理解Java EE平台的核心概念和技术。 首先,让我们逐一解析这些章节的内容: 1. **Chapter 19**:这部分可能涉及的是Java EE的高级话题,如EJB(Enterprise JavaBeans)或JMS...

    java源码包3

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

    java1.8源码

    Java 1.8源码是Java开发人员深入理解平台内部工作原理的重要资源。它包含了Java标准版(Javase)的各类核心库源代码,这些库是构建Java应用程序的基础。让我们一起探讨一下Java 1.8中的一些关键知识点,以及在`javax...

    JAVA数据库编程实例随书源码Java实用源码整理learns

    本资源"JAVA数据库编程实例随书源码Java实用源码整理learns"提供了一系列的实例代码,旨在帮助开发者深入理解和掌握Java与数据库之间的交互。以下是这些知识点的详细说明: 1. JDBC(Java Database Connectivity)...

    129个Java项目源码下载 [共分20个压缩卷] 【20】.zip

    这个"129个Java项目源码下载 [共分20个压缩卷] 【20】.zip"文件显然包含了大量的Java Web项目源代码,对于学习、理解和实践Java Web开发技术提供了丰富的资源。以下是基于这些源码可能涉及的一些核心Java Web知识点...

    JAVA API官方源码

    `java.lang`是每个Java程序的基础,包含了诸如`String`、`Object`和`System`等基本类。`java.util`提供了集合框架、日期时间处理、随机数生成等功能。`java.io`处理输入/输出操作,如文件读写、流处理等。 `...

    java源码分析

    从给定的文件片段中,我们可以提取出关于Java中Object类和String类的源码分析的知识点。 首先,Object类是Java中所有类的根类。它包含了所有对象共有的方法,是所有类继承结构的最顶层。从文件片段中我们可以看到...

    Java源码(ssm)

    【Java源码(ssm)】是一个基于Maven构建的项目,主要采用了Spring、Spring MVC和MyBatis三个核心框架的集成,这在Java Web开发中是非常常见的组合,被称为SSM框架。以下将详细讲解这三个框架及其在项目中的应用。 ...

    java博客1源码.rar

    Java博客系统一般会使用ORM(Object-Relational Mapping)框架,如Hibernate或MyBatis,来简化数据库操作。这些框架将Java对象与数据库表映射,使开发者可以更专注于业务逻辑而不是SQL语句。 4. **MVC设计模式** ...

    java jdk1.8 源码

    Java JDK 1.8源码是Java开发工具包的一个重要组成部分,它包含了Java语言的核心类库,对于深入理解和学习Java编程语言以及其运行机制至关重要。源码提供了对JVM(Java虚拟机)、类库和API的直接洞察,帮助开发者探究...

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

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

    java图书管理系统源码

    3. Hibernate框架:Hibernate是一个强大的对象关系映射(Object-Relational Mapping,ORM)工具,它可以将Java对象映射到数据库表,从而减轻了数据库操作的复杂性。在图书管理系统中,Hibernate可能被用来操作图书、...

    Java解析JSON源码

    Java解析JSON源码是Java开发中的重要一环,因为JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,广泛应用于服务器与客户端之间的数据传输。本文将深入探讨如何在Java中解析JSON源码,以及如何利用...

Global site tag (gtag.js) - Google Analytics