11 2024 档案

摘要:一、线程状态 线程是 cpu 任务调度的最小执行单位,每个线程拥有自己独立的程序计数器、虚拟机栈、本地方法栈。线程状态包括:创建、就绪、运行、阻塞、死亡。 二、线程状态切换 三、阻塞唤醒过程 阻塞 以下三个方法的调用都会使当前线程阻塞,该线程将会被放置到对该 Object 的请求等待队列中,然后让出 阅读全文
posted @ 2024-11-15 14:41 CodeWhisperer001 阅读(19) 评论(0) 推荐(0) 编辑
摘要:Java线程控制方法的作用及其区别: start: 作用:启动线程,由虚拟机自动调度执行run()方法。 区别:线程处于就绪状态。 run: 作用:线程逻辑代码块处理,JVM调度执行。 区别:线程处于运行状态。 sleep: 作用:让当前正在执行的线程休眠(暂停执行)。 区别:不释放锁。 wait: 阅读全文
posted @ 2024-11-15 13:55 CodeWhisperer001 阅读(4) 评论(0) 推荐(0) 编辑
摘要:重载 概念: 重载是在同一个类中,有多个同名的方法,但参数类型、数量或顺序不同。 目的: 提供多种方式调用同一名称的方法,以适应不同的场景。 应用: 当需要以统一的方式来处理不同类型的数据时,可以用重载。 重写 概念: 重写发生在继承关系中,子类重新定义父类的方法。 目的: 子类可以根据自己的需求, 阅读全文
posted @ 2024-11-13 10:17 CodeWhisperer001 阅读(16) 评论(0) 推荐(0) 编辑
摘要:ThreadLocal是线程本地存储,在每个线程中都创建了一个ThreadLocalMap对象,每个线程可以访问自己内部ThreadLocal对象内的value。 ThreadLocal有以下几种典型应用场景: 1.数据库连接管理:在多线程环境下,为每个线程分配独立的数据库连接,避免了连接被其他线程 阅读全文
posted @ 2024-11-12 14:55 CodeWhisperer001 阅读(18) 评论(0) 推荐(0) 编辑
摘要:有时需要复制一个对象,并且希望保留原有的对象进行接下来的操作。这时就需要使用克隆。 如何实现对象克隆? 实现Cloneable接口并重写clone方法: 实现​​Cloneable​​接口后,可以调用​​Object.clone()​​方法来创建一个新的对象。 通过序列化和反序列化实现深克隆: 将对 阅读全文
posted @ 2024-11-12 14:34 CodeWhisperer001 阅读(21) 评论(0) 推荐(0) 编辑
摘要:Java中常见创建线程池的几种方法。 1. 使用 ​​Executors​​ 工具类创建线程池 ​​newFixedThreadPool(int nThreads)​​ 特点:创建一个固定大小的线程池,线程池中的线程数始终保持不变。 适用场景:适用于任务量已知且相对固定的场景,可以有效控制资源的使用 阅读全文
posted @ 2024-11-12 11:57 CodeWhisperer001 阅读(286) 评论(0) 推荐(0) 编辑
摘要:JVM(Java Virtual Machine,Java虚拟机): -JVM是Java程序的运行平台,它是一种抽象化的计算机,可以将编译后的Java字节码(.class文件)转换为特定操作系统能够执行的机器码。 它负责管理内存分配、垃圾回收、线程管理等底层服务,使得Java具有“一次编写,到处运行 阅读全文
posted @ 2024-11-12 11:15 CodeWhisperer001 阅读(9) 评论(0) 推荐(0) 编辑
摘要:​​ConcurrentHashMap​​​是Java中一种线程安全且高效的哈希表实现,它在Java 8之后的版本中采用了与早期版本不同的扩容机制。在Java 8及以后的版本中,​​ConcurrentHashMap​​利用了分段锁(Segment,直到Java 8)和之后的CAS(Compare 阅读全文
posted @ 2024-11-12 11:08 CodeWhisperer001 阅读(28) 评论(0) 推荐(0) 编辑
摘要:重载(Overloading)和重写(Overriding)是面向对象编程中两个重要的概念,它们在实现多态性时起着关键作用,但两者之间有明显的区别: 定义上的区别: 重载(Overloading) 指的是在同一个类中可以有多个方法名相同,但这些方法的参数列表(参数的个数、类型或顺序)不同,或者是方法 阅读全文
posted @ 2024-11-11 16:29 CodeWhisperer001 阅读(22) 评论(0) 推荐(0) 编辑
摘要:锁的级别:无锁 => 偏向锁 => 轻量级锁 => 重量级锁 无锁:没有对资源进行锁定,所有线程都可以访问,但是只有一个线程能成功修改资源,其他的线程会不断尝试,直至修改成功。 偏向锁:偏向锁是指当一个线程访问同步块并获取锁时,会在对象头和栈帧中的锁记录里存储线程ID。一旦该线程再次进入同步块,无需 阅读全文
posted @ 2024-11-11 16:09 CodeWhisperer001 阅读(37) 评论(0) 推荐(0) 编辑
摘要:1. 继承 ​​Thread​​ 类 优点: 简单直观,适合初学者。 直接继承 ​​Thread​​ 类,可以方便地访问和使用 ​​Thread​​ 类的方法。 缺点: Java 不支持多继承,因此如果你的类已经继承了其他类,则不能继承 ​​Thread​​ 类。 仅适用于简单的线程任务。 示例: 阅读全文
posted @ 2024-11-11 15:37 CodeWhisperer001 阅读(4) 评论(0) 推荐(0) 编辑
摘要:线程池有五种典型状态: 1.RUNNING(运行状态):在这个状态下,线程池可以接收新的任务提交,并且能够处理已添加到任务队列中的任务。这是线程池的初始状态,也是最活跃的状态。这是最正常的状态 2.SHUTDOWN(关闭状态)当调用了线程池的`shutdown()`方法后,线程池进入此状态。此时,线 阅读全文
posted @ 2024-11-11 15:23 CodeWhisperer001 阅读(195) 评论(0) 推荐(0) 编辑
摘要:在Java中,`hashCode()`和`equals()`方法之间存在紧密的关系,主要体现在它们共同作用于对象的比较和存储上,尤其是在集合(如HashSet、HashMap)和哈希表的实现中。 1.hashCode()和equals()是Object类中定义的两个重要方法,用于对象的比较和哈希处理 阅读全文
posted @ 2024-11-11 15:14 CodeWhisperer001 阅读(32) 评论(0) 推荐(0) 编辑
摘要:泛型中的 ​​extends​​​ 和 ​​super​​ 关键字用于设置类型参数的上下界,控制可以传递给泛型类型的参数类型。它们的区别在于限制的方向和用途: 1.extends: 上界限制: 使用 ​​extends​​ 关键字定义了一个类型参数的上界,意味着传入的类型必须是指定类型或其子类型。 阅读全文
posted @ 2024-11-11 15:06 CodeWhisperer001 阅读(85) 评论(0) 推荐(0) 编辑
摘要:在Java中,​​String​​​、​​StringBuffer​​​、和​​StringBuilder​​都是用于处理字符串的类,但它们之间存在一些关键差异,主要涉及可变性、线程安全性和性能: 1.String: -不可变性:​​String​​对象一旦被创建,其内容就不能改变。任何对​​Str 阅读全文
posted @ 2024-11-11 11:58 CodeWhisperer001 阅读(5) 评论(0) 推荐(0) 编辑
摘要:在Java中,​​==​​​ 和 ​​equals​​ 方法用于比较对象,但它们之间存在本质的区别: ​​==​​ 操作符 基本数据类型: ​​==​​ 比较的是值是否相等。 int a = 10; int b = 10; System.out.println(a == b); // 输出 true 阅读全文
posted @ 2024-11-09 13:30 CodeWhisperer001 阅读(21) 评论(0) 推荐(0) 编辑
摘要:乐观锁:认为每次去拿数据的时候别人不会修改,所以不会上锁,但是每次要拿数据的时候都会先判断数据是否被别人修改 悲观锁:认为每次去拿数据的时候别人都会修改,所以每次都会上锁。 使用场景:乐观锁使用于多读少写的应用类型,这样可以提高吞吐量;相反的情况则使用悲观锁 乐观锁和悲观锁是并发控制中两种常见的锁机 阅读全文
posted @ 2024-11-09 13:10 CodeWhisperer001 阅读(16) 评论(0) 推荐(0) 编辑
摘要:​ 堆内存设置 -Xms:设置JVM堆的初始大小。 例如:​​-Xms2g​​ 表示初始堆大小为2GB。 -Xmx:设置JVM堆的最大大小。 例如:​​-Xmx2g​​ 表示最大堆大小为2GB。 -XX:NewRatio:设置年轻代和老年代的比例。 例如:​​-XX:NewRatio=4​​ 表示年 阅读全文
posted @ 2024-11-09 11:45 CodeWhisperer001 阅读(8) 评论(0) 推荐(0) 编辑
摘要:强引用(Strong Reference): Java中默认声明的就是强引用,例如:​​Object obj = new Object();​​ 只要强引用存在,垃圾回收器将永远不会回收被引用的对象 ,哪怕内存不足时,JVM也会直接抛出OutOfMemoryError,不会去回收。如果想中断强引用与 阅读全文
posted @ 2024-11-09 11:17 CodeWhisperer001 阅读(5) 评论(0) 推荐(0) 编辑
摘要:类加载的执行过程是Java虚拟机(JVM)将类文件从磁盘加载到内存,并进行验证、准备、解析和初始化等一系列操作的过程。这个过程可以分为以下几个阶段: 1. 加载 根据查找路径找到相应的 class 文件然后导入; 2. 验证 检查加载的 class 文件的正确性; 3. 准备 给类中的静态变量分配内 阅读全文
posted @ 2024-11-09 11:08 CodeWhisperer001 阅读(5) 评论(0) 推荐(0) 编辑
摘要:双亲委派模式是在Java 1.2后引入的, 如果一个类收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器执行,如果父加载器还存在其父加载器,则进一步向上委托,依次递归,请求将最终到达顶层的启动类加载器,如果父类加载器可以完成父加载任务,就成功返回,如果父加载器无法完成加载任务, 阅读全文
posted @ 2024-11-09 10:55 CodeWhisperer001 阅读(4) 评论(0) 推荐(0) 编辑
摘要:接口和抽象类都遵循”面向接口而不是实现编码”设计原则,它可以增加代码的灵活性,可以适应不断变化的需求。 接口 vs 抽象类 继承限制: Java 中,一个类只能继承一个类,但可以实现多个接口。 继承一个类意味着失去了继承其他类的机会。 行为表示: 接口通常用于表示附加的行为或描述,如 Runnabl 阅读全文
posted @ 2024-11-05 18:29 CodeWhisperer001 阅读(4) 评论(0) 推荐(0) 编辑
摘要:public static boolean isPrime(int n){if (n <= 3) { return n > 1;) for(int i = 2; i < n; i++){if (n % i == 0) { return false;} ) return true;} 质数(也称为素数 阅读全文
posted @ 2024-11-05 18:03 CodeWhisperer001 阅读(103) 评论(0) 推荐(0) 编辑
摘要:序列化的定义 Java 序列化是为了保存各种对象在内存中的状态,并且可以把保存的对象状态再读出来。序列化是一种用于处理对象流的机制,它将对象的内容转换成一种可以在网络之间传输的形式。反序列化则是将这种形式的对象恢复成原来的对象。 实现方式 序列化是通过实现​​Serializable​​接口来完成的 阅读全文
posted @ 2024-11-05 17:42 CodeWhisperer001 阅读(42) 评论(0) 推荐(0) 编辑
摘要:finally 一定会执行,即使是 catch 中 return 了,catch 中的 return 会等 finally 中的代码执行完之后,才会执行。 下面提供了一段示例代码和运行结果。问题的核心在于当​​catch​​​块中有​​return​​​语句时,​​finally​​块是否还会被执行 阅读全文
posted @ 2024-11-05 17:27 CodeWhisperer001 阅读(118) 评论(0) 推荐(0) 编辑
摘要:synchronized 是由一对 monitorenter/monitorexit 指令实现的,monitor 对象是同步的基本实现单元。在 Java 6 之前,monitor 的实现完全是依靠操作系统内部的互斥锁,因为需要进行用户态到内核态的切换,所以同步操作是一个无差别的重量级操作,性能也很低 阅读全文
posted @ 2024-11-05 17:15 CodeWhisperer001 阅读(4) 评论(0) 推荐(0) 编辑
摘要:-1 等于 -1,因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃。(观点不认同) Math提供了三个与取整有关的方法:ceil、floor、round (1)ceil:向上取整; (2)floor:向下取整; (3)round:四舍五入; 1、cei 阅读全文
posted @ 2024-11-04 18:34 CodeWhisperer001 阅读(36) 评论(0) 推荐(0) 编辑
摘要:Iterator 可以遍历 Set 和 List 集合,而 ListIterator 只能遍历 List。 Iterator 只能单向遍历,而 ListIterator 可以双向遍历(向前/后遍历)。 ListIterator 从 Iterator 接口继承,然后添加了一些额外的功能,比如添加一个元 阅读全文
posted @ 2024-11-04 18:18 CodeWhisperer001 阅读(4) 评论(0) 推荐(0) 编辑
摘要:接口 (Interface) - **定义**:使用 `interface` 关键字定义。- **实例化**:接口不能被直接实例化。- **实现**:一个类可以实现多个接口。- **方法**:Java 8 之前,接口中只能包含抽象方法(默认为 `public abstract`)。Java 8 之后 阅读全文
posted @ 2024-11-04 17:47 CodeWhisperer001 阅读(6) 评论(0) 推荐(0) 编辑
摘要:1. **new 关键字** User user = new User(); 2. **clone() 方法** User clonedUser = originalUser.clone(); 3. **通过反射机制创建** Class<?> cls = Class.forName("com.dao 阅读全文
posted @ 2024-11-04 17:33 CodeWhisperer001 阅读(11) 评论(0) 推荐(0) 编辑
摘要:1. **String**: - 是不可变对象。每次对 String 类型进行修改时都会生成一个新的对象。 - 适用于不频繁修改字符串的情况。 2. **StringBuilder**: - 线程不安全,效率高,多用于单线程环境。 - 适用于需要频繁修改字符串的操作。 3. **StringBuff 阅读全文
posted @ 2024-11-04 17:23 CodeWhisperer001 阅读(5) 评论(0) 推荐(0) 编辑
摘要:1. **强引用(Strong Reference)**: - Java中默认声明的就是强引用,例如:`Object obj = new Object();` - 只要强引用存在,垃圾回收器将永远不会回收被引用的对象。 - 如果想让对象被回收,可以将对象置为null。 2. **软引用(SoftRe 阅读全文
posted @ 2024-11-04 10:27 CodeWhisperer001 阅读(12) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示