05 2023 档案
摘要:在 Java 中,volatile 是一种关键字,用于修饰变量。**使用 volatile 关键字修饰的变量具有可见性和有序性**,但不保证原子性。 ## 相关定义说明 原子性(Atomicity):即一个操作或者多个操作,要么全部执行,并且执行的过程不会被任何因素打断,要么都不执行。 有序性(Or
阅读全文
摘要:线程池是一种管理和复用线程资源的机制,它由一个线程池管理器和一组工作线程组成。线程池管理器负责创建和销毁线程池,以及管理线程池中的工作线程。工作线程则负责执行具体的任务。 线程池的主要作用是管理和复用线程资源,避免了线程的频繁创建和销毁所带来的开销。 线程池包含两个重要的组成部分: 1. 线程池大小
阅读全文
摘要:Java 面试不可能不问线程池,无论是大厂还是小厂。这不,前几天面试阿里时也被问到了这个问题,虽不难,但这里也系统复盘一下。 要搞懂线程池的执行流程,最好的方式是去看它的源码,它的源码如下: ```java public void execute(Runnable command) { if (co
阅读全文
摘要:线程通讯指的是多个线程之间通过共享内存或消息传递等方式来协调和同步它们的执行。在多线程编程中,通常会出现多个线程需要共同完成某个任务的情况,这时就需要线程之间进行通讯,以保证任务能够顺利地执行。 线程通讯的实现方式主要有以下两种: - 共享内存:多个线程可以访问同一个共享内存区域,通过读取和写入内存
阅读全文
摘要:众所周知 ConcurrentHashMap 是 HashMap 的多线程版本,HashMap 在并发操作时会有各种问题,比如死循环问题、数据覆盖等问题。而这些问题,只要使用 ConcurrentHashMap 就可以完美解决了,那问题来了,ConcurrentHashMap 是如何保证线程安全的?
阅读全文
摘要:前几天面试被问懵了,还是关于 HashMap 的面试题,什么是负载因子?为什么是0.75?第一个问题还好回答,然而第二个问题就有点含糊其辞说不清楚了,所以今天就来好好复盘一下这道题。 HashMap 负载因子 load factor,也叫做扩容因子和装载因子,它是 HashMap 在进行扩容时的一个
阅读全文
摘要:HashMap 死循环发生在 JDK 1.8 之前的版本中,它是指在并发环境下,因为多个线程同时进行 put 操作,导致链表形成环形数据结构,一旦形成环形数据结构,在 get(key) 的时候就会产生死循环。如下图所示:  方法来实现对象的克隆。 什么是浅克隆和深克隆?它们有什么区别
阅读全文
摘要:在 Java 中,抽象类和接口是两种不同的类类型。它们都不能直接实例化,并且它们都是用来定义一些基本的属性和方法的,但它们有以下几点不同: 定义:定义的关键字不同,抽象类是 abstract,而接口是 interface。 方法:抽象类可以包含抽象方法和具体方法,而接口只能包含方法声明(抽象方法)。
阅读全文