Java语言
文章平均质量分 94
流金岁月5789651
开始,新的一段旅程
展开
-
HashMap 源码解析
存储结构JDK 1.7HashMap是以数组和链表组合构成。如下图所示:// JDK 1.7//默认数组大小,二进制1左移4位为16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //默认的负载因子static final float DEFAULT_LOAD_FACTOR = 0.75f;//最大容量static final int MAXIMUM_CAPACITY = 1 << 30;//默认的空数组原创 2022-03-16 09:54:55 · 420 阅读 · 0 评论 -
Java 虚拟机笔记
概述JDK 包含了Java语言、Java虚拟机和Java API 类库这三部分,是Java 程序开发的最小环境。JRE 包含了Java API 中的Java SE API子集和Java虚拟机这两部分,是Java程序运行的标准环境。Java虚拟机执行流程Java 虚拟机执行流程分为两大部分,分别是编译环境和运行时环境。当一个Java 文件经过Java 编译器编译后会生成Class 文件,这个Class 文件会由Java 虚拟机来进行处理。Java 虚拟机与Java 语言没有什么必然的联系,它与特定原创 2022-02-22 19:56:48 · 748 阅读 · 0 评论 -
Java 线程池基础知识
Executor 框架用于任务的提交和执行解耦,任务的提交交给Runnable 或者Callable,而Executor框架用来处理任务。Executor 框架中最核心的成员变量是ThreadExecutor,它是线程池的核心实现类。ThreadPoolExecutor 构造函数//五个参数的构造函数public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, .原创 2021-09-21 10:57:52 · 593 阅读 · 1 评论 -
Java 多线程 :阻塞队列
阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。常见阻塞场景当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞(挂起),直到有数据放入队列。当队列中填满数据的情况下,生产端的所有线程都会被自动阻塞(挂起),直到队列中有空的位置,线程被自动唤醒。支持以上两种阻塞场景的队列被称为阻塞队列BlockingQueue 的核心方法放入数据:offer(an Object).原创 2021-09-21 10:35:44 · 309 阅读 · 0 评论 -
Java 多线程同步:volatile 关键字
多线程基础知识Java 内存模型Java 中的堆内存用来存储对象的实例,堆内存是被所有线程共享的运行时内存区域,因此,它存在可见性的问题。而局部变量、方法定义的参数则不会在线程之间共享,它们不会有内存可见性问题,也不受内存模型的影响。Java 内存模型定义了线程和主存之间的抽象关系:线程之间的共享变量存储在主存中,每个线程都有了一个私有的本地内存,本地内存中存储了该线程共享变量的副本。线程A 与线程B 之间若要通信的话,必须要经历:线程A 把本地(工作)内存中更新过的共享变量刷新到主内存中原创 2021-09-10 20:34:22 · 560 阅读 · 0 评论 -
Java 多线程同步:Synchronized 关键字
内置锁每个Java对象都对应着一个实现同步的锁,这个锁就是内置锁。之所以每个对象都有一个内置锁,是为了免去显式地创建锁对象。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。Java内置锁是一个互斥锁,这就是意味着最多只有一个线程能够获得该锁,当线程A尝试去获得线程B持有的内置锁时,线程A必须等待或者阻塞,直到线程B释放这个锁,如果B线程不释放这个锁,那么A线程将永远等待下去。同步方法和同步代码块对象锁 // 普通同步方法 public synchron原创 2021-09-01 20:31:45 · 530 阅读 · 0 评论 -
Java 多线程基础
进程与线程进程进程是操作系统结构的基础,是程序在一个数据集合上运行的过程,是系统进行资源分配和调度的基本单位。进程可以被看作程序的实体,同样,它也是程序的容器。线程线程是操作系统调度的最小单元,也叫作轻量级进程。在一个进程中可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性。使用多线程的优势使用多线程可以减少程序的响应时间如果某个操作很耗时,或者陷入长时间的等待,此时程序将不会响应鼠标和键盘等的操作,使用多线程后可以把这个耗时的操作分配到一个单独的线程中执原创 2021-08-23 18:29:37 · 219 阅读 · 1 评论 -
JAVA知识点回顾之HashCode、Equals和==
1. 运算符 ==在Java中数据类型分为两大类:基本数据类型(byte,short,char,int,long,float,double,boolean)和引用数据类型(类、接口和数组)。基本数据类型在基本数据类型中,== 操作比较的是两个变量的值是否相等。引用数据类型在引用数据类型中,== 操作比较的是两个对象在内存中的引用地址。引用类型在栈中存放的是对象引用(地址),对象是放在堆中。2. Equals 方法equals 是 Object类默认提供的方法。没有覆盖情况主要用于判断原创 2020-06-22 19:58:17 · 165 阅读 · 0 评论 -
JAVA 知识点回顾之泛型
概述泛型可以解决数据类型的安全性问题。原理:在类声明的时候通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型泛型是在JDK1.5 之后增加的新功能格式1.泛型类 访问权限 class 类名称<泛型,泛型...>{ 属性 方法 }public class GenericDemo0<T> { p...原创 2019-10-09 18:16:19 · 171 阅读 · 0 评论 -
JAVA 知识回顾之StringBuffer 和 StringBuilder
StringBuffer StringBuffer 简称字符串缓冲区,线程安全的可变字符序列。 StringBuffer类似一个字符容器,当在其中添加或删除字符时,并不会产生新的StringBuffer对象。要点StringBuffer 上的主要操作是 append 和 insert 方法,它们都用于添加字符。不同的是,append() 方法始终将这些字符添加到缓冲区的末尾,而...原创 2018-09-08 15:01:26 · 496 阅读 · 0 评论