• Java JDK1.8源码学习之路 1 Object


    写在最前

    对于一个合格的后端程序员来说,现行的流行框架早已经能胜任基本的企业开发,Springboot 任何的框架都把重复的工作更佳简单/优化的解决掉,但是完全陷入在这样的温水里面,

    好比温水煮青蛙,越是舒服下去,越不行,还是那句话,万变不离其宗。真正能了解JAVA在多少年来经久不衰的秘密,以及最基础,也是最重要的,还是得从源码下手,了解JDK开发人员的编码规范

    以及实现JDK过程中的思路以及为了更加了解这款完美的语言!

    中文在线版:https://blog.fondme.cn/apidoc/jdk-1.8-youdao/

    目录

    public class Object {
    

      //native 方法用于注册一个系统
      //native是一个计算机函数,一个Native Method就是一个Java调用非Java代码的接口。方法的实现由非Java语言实现,比如C或C++。  
    private static native void registerNatives();
      //静态方法块 在这个类加载的时候去调用这个静态的registerNatives()方法,用于注册这个调用系统底层的接口
      
    static { registerNatives(); }   //getClass 这个方法对于熟悉JAVA的反射再熟悉不过了
      //反射就是在java运行过程中,通过类名.getClass() 可以获取到这个类运行过程中的字节码文件(Class文件)
    public final native Class<?> getClass(); //hasCode返回一个对象在内存里面所表示的hash值
      //如果两个对象的hash值相同,则表示这两个对象是相等的,或者说是同一个对象
    public native int hashCode(); //比较两个对象是否相等,这里使用的是 ==号比较符号,判断两个对象是否有相同的内存地址。
      //这里复习一下,==比较基本类型 比如int char floot 都比较的是他们的值
      //对象使用 == 比较的时候比较的是他们的内存地址。
    public boolean equals(Object obj) { return (this == obj); } //对象的克隆方法,需要被克隆的对象需要实现Cloneable 接口 调用父类的clone()方法实现对象的克隆 protected native Object clone() throws CloneNotSupportedException; //toString 方法,用于直观的表现出当前对象,一般表现形式是 对象名称+@+十六进制哈希值 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } //唤醒正在等待这个对象的某一个线程,这个唤醒是任意的 public final native void notify(); //唤醒所有等待当中的线程 public final native void notifyAll(); //让一个线程进入等待状态,传入一个毫秒数后运行,或者由另一个线程调用notify()方法让这个线程再次运行
    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 > 0) { timeout++; } wait(timeout); } //这个方法其实就是调用wait方法,只不过传入一个0ms的参数 public final void wait() throws InterruptedException { wait(0); } //这个方法和垃圾回收机制有关,通知垃圾回收器开始运行,但是运行的具体时间不确定,垃圾回收器会清理掉当前内存中没有引用的对象 protected void finalize() throws Throwable { }

    笔记:

    阻塞状态:(等待状态)

    一个线程执行了sleep() 或者suspend(挂起)后,将会失去CPU资源,进入阻塞状态。在睡眠时间过后,就会再次进入就绪状态。

    阻塞的分类

    • 等待阻塞:运行状态中,线程执行了wait()方法,使其进入等待状态
    • 同步阻塞:在一个线程获取synchronized 同步锁失败(已经被占用)
    • 其他阻塞:通过调用线程的 sleep() 或 join() 发出了 I/O 请求时,线程就会进入到阻塞状态
  • 相关阅读:
    日期处理工具类
    本地存储
    wangeditor富文本编辑器的使用
    vue+axios 拦截器及使用
    angular引入bootstrap-slider无效问题
    解决vscode导致电脑卡顿问题
    vue组件
    vue框架制作TodoList
    vue框架
    jQuery系列09
  • 原文地址:https://www.cnblogs.com/ChromeT/p/11651372.html
Copyright © 2020-2023  润新知