写在最前

对于一个合格的后端程序员来说,现行的流行框架早已经能胜任基本的企业开发,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 请求时,线程就会进入到阻塞状态

最新文章

  1. python logging colorlog
  2. Hibernate 学习笔记一
  3. Winform读写App.config文件以及重启程序
  4. C# 对象的序列化与反序列化 (DataContractJsonSerializer)
  5. Oracle题目
  6. 小printf的故事(未完待续)
  7. NSIS学习记录の----win8.1和win10对于NSIS创建的卸载快捷方式无法在开始目录下显示
  8. Tomcat创建虚拟目录和程序热部署
  9. Selenium2Library系列 keywords 之 _SelectElementKeywords 之 page_should_contain_list(self, locator, message=&#39;&#39;, loglevel=&#39;INFO&#39;)
  10. perl6 JSON::Fast模块json解析的使用
  11. golang各版本的变化
  12. UVa 12459 - Bees&amp;#39; ancestors
  13. Nyoj 城市平乱(图论)
  14. Slim Span(Kruskal)
  15. 正则表达示 for Python3
  16. html 表格边线设置
  17. angular5 @viewChild @ContentChild ElementRef renderer2
  18. vs2015和Oracle在一起时的Shit问题
  19. centos7安装elasticsearch6.3.x集群并破解安装x-pack
  20. Js表单验证控件-02 Ajax验证

热门文章

  1. 微信小程序class封装http
  2. mysql 表联结,内部联结
  3. hdfs、yarn集成ranger
  4. avalon用background-image不起作用,怎么来选取前几个的图片进行渲染
  5. 第09组 Beta冲刺(3/4)
  6. tomcat启动慢的解决办法
  7. ActiveMQ消息中间件的作用以及应用场景
  8. null undefined NaN
  9. 利用Flex&amp;b 开发一门语言
  10. k8s pv,pvc无法删除问题