Java/sleep() 和 wait() 的区别,以及 notify() 和 notifyall() 的区别

Java/sleep() 和 wait() 的区别,以及 notify() 和 notifyall() 的区别

sleep() 和 wait() 的区别

  • sleep() 是 Thread 类的方法,wait() 是 Object 类的方法
  • sleep() 方法可以在任何地方使用。wait() 方法只能在 synchronized 方法或者 synchronized 块中使用
  • 最主要的本质区别:Thread.sleep() 只会让出 CPU,不会使得当前线程释放锁,不会影响锁的相关行为。Object.wait() 不仅使得当前线程会让出 CPU,还会释放已经占用的同步资源锁。如下代码:
阅读更多
Java/如何处理线程的返回值
Java/Object 的finalize() 方法是否与 C++ 的析构函数作用相同?

Java/Object 的finalize() 方法是否与 C++ 的析构函数作用相同?

Object 的finalize() 方法是否与 C++ 的析构函数作用相同?

  • 与 C++ 的析构函数不同,析构函数的调用时机是确定的,而 finalize() 方法的调用时机是不确定的
  • 当垃圾回收器要宣告一个对象死亡时,至少要经过两次标记。如果对象在进行可达性分析后,发现没有与 GC Roots 相连,就会被第一次标记,并且判断是否覆盖 finalize() 方法。如果对象覆盖了 finalize() 方法,并且没有与 GC Roots 相连,就会被放入 F-Qeueu 队列,并由稍后虚拟机建立的低优先级的 finalize 线程去执行触发 finalize 方法
阅读更多
Java/线程的状态

Java/线程的状态

Java 里的线程有 6 个状态,这 6 个状态与操作系统的里线程的状态有部分差异,原因是 Java 对操作系统的线程做了封装,下面来说说 Java 线程的状态和对应的操作系统的线程的状态。 - 新建(New):创建后尚未启动的线程的状态,即使用 new 关键字创建了线程,但是还没有调用线程的 start() 方法。 - 运行(Runnable):Java线程的 Runnable 状态包括操作系统里的 Ready 和 Running 状态。在 Java 中处于 Runnable 状态的线程有可能在执行状态,对应于操作系统层面的 Running;也有可能在等待 CPU 为这个线程分配时间片,对应于操作系统层面的 Ready。

阅读更多
Java/Java 内存模型 JMM 与 volatile

Java/Java 内存模型 JMM 与 volatile

Java 内存模型(Java Memory Model,简称 JMM)是一种抽象的概念,并不真实存在,它描述的是一组规范或者规则,通过这种规范定义了程序中各个变量(包括实例字段、静态字段和构成数组对象的元素)的访问方式。

阅读更多
Java/Java 集合框架

Java/Java 集合框架

数据结构常见考点

  • 数组和链表的区别
  • 链表的操作:如反转、链表环路检测、双向链表、循环链表以及相关操作
  • 队列、栈的应用
  • 二叉树的遍历以及其递归和非递归的实现
  • 红黑树的旋转
阅读更多
Java/J.U.C(java.util.concurrent)包的梳理

Java/J.U.C(java.util.concurrent)包的梳理

java.util.concurrent提供了并发编程的解决方案,主要包括两大块: - CAS:是java.util.concurrent.atomic包的基础 - AQS:是java.util.concurrent.locks包以及一些常用类(比如 Semophore、ReentrantLock)的基础

J.U.C 包的分类: - 线程执行器:executor - 锁:locks

阅读更多
MySQL/数据库:关键语法

MySQL/数据库:关键语法

group by 里面出现某个表的字段。select 里面出现的列要么是该group by 里面出现的列,要么是带有函数的列,或者别的表的列。 where 是用来过滤行,group by 用来过滤组 如果省略 group by 子句, having 子句就可以替代 where 子句

阅读更多
Java/面试题:谈谈你对 Java 的理解
Java/面试题:Java 的垃圾回收(GC)

Java/面试题:Java 的垃圾回收(GC)

在 JVM 中,一个对象被判断为垃圾的标准是:没有其他对象引用。 # 在实现上,判断对象是否为垃圾的算法有两种: - 引用记数法 - 通过判断对象的被引用数量来判断对象是否可以被回收 - 每个对象实例都有一个引用计数器,被引用则 +1,完成引用则 -1 - 任何引用计数为 0 的对象实例都可以被当做垃圾 - 优点:实现简单,执行效率高,程序执行受影响较小 - 缺点:无法检测出循环引用的情况,导致内存泄露

阅读更多