Java Object源码

本文详细解读了Java Object类中的equals()、hashCode()、finalize()、notify、notifyAll和wait方法,深入探讨了线程互斥控制、同步与互斥的概念,并对比了notify和notifyAll的区别,同时解释了wait方法的作用及其释放锁的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我从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 { }
}


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

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

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

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

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

[b]5. wait[/b]
注意一点,它会释放锁的。

[b]6.同步与互斥[/b]
syschronized是用于互斥的,而wait和nofity是用于同步的。著名的消费者生产者就是使用这两个结合的经典案例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值