CompletableFuture-一种异步任务编排解决方案 序言多线程主要是通过提高对 CPU 的利用率从而提升多任务处理的效率,以满足用户的友好体验。 根据 Oracle 官方文档的描述:JAVA 中创建线程的方式有两种: 继承 java.lang.Thread 类。( Thread 类本质上也是实现了 Runnable 接口) 实现 java.lang.Runnable 接口。 但是,这两种方法都存在一个缺陷——没有返回值,也就是说我们无法得知线程 2023-10-13 JAVA > 多线程 #Thread #多线程
ThreadLocal ThreadLocal是什么在处理多线程并发安全的问题中,我们最常使用的方法就是通过锁来控制多个不同线程对临界区的访问。 但无论是什么样的锁,乐观锁或者悲观锁,尽管JDK 在升级过程中对它们都有不同程度的优化,但在并发冲突的时候总是会对性能产生一定的影响。 而我们今天的主角 ThreadLocal 解决的正是彻底避免多线程之间产生的竞争问题。 从字面意思上看,ThreadLocal 可以解释为线程 2023-10-09 JAVA > 多线程 #Thread #多线程
JDK源码系列-HashMap 介绍HashMap是Java程序员使用频率最高的用于映射(key-value键值对)处理的数据类型。 JDK1.8 之前 HashMap 是由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。 JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于等于阈值(默认为 8)(将链表转换成红黑树前会判断,如果 2023-09-27 源码 > JDK #HashMap #哈希表
MySQL的自增主键一定是连续的吗? 简介MySQL自增主键的作用是在自增列上定义一个主键,让主键的值由数据库系统自动分配,而不需要用户输入。这样可以避免主键重复或缺失,提高插入数据的效率,保持主键索引的递增顺序,减少索引的碎片化。 索引的碎片化是指索引中的数据在物理存储上不连续,而是分散在磁盘上的不同位置。这样会导致查询需要更多的磁盘I/O操作,降低查询性能和资源利用率。 但实际上,MySQL的自增主键并不能保证一定是 2023-09-26 数据库 > MySQL #数据库 #MySQL
HTTP缓存 简介为什么要使用缓存?HTTP(超文本传输协议)是一种无状态的应用程序级请求/响应协议,使用可扩展语义和自描述消息与基于网络的超文本信息系统进行灵活的交互。对于现代互联网来说存在着大量的静态文件例如HTML、CSS和图片等资源,这些资源在后续的请求中不会发生变更。我们可以缓存存储可缓存的响应,以减少未来等效请求的响应时间和网络带宽消耗。 HTTP 缓存的目标是通过重用先前的响应消息来满足 2023-09-25 网络 > HTTP #HTTP #缓存
JDK源码系列-LinkedList LinkedList简介本文内容均以JDK8为例。 LinkedList 是一个基于双向链表实现的集合类,经常被拿来和 ArrayList 做比较。 不过,我们在项目中一般是不会使用到 LinkedList 的,需要用到 LinkedList 的场景几乎都可以使用 ArrayList 来代替,并且,性能通常会更好!就连 LinkedList 的作者约书亚 · 布洛克(Josh Bloch)自己都 2023-09-24 源码 > JDK #集合 #LinkedList
JDK源码系列-ArrayList ArrayList简介本文内容均以JDK8为例。 ArrayList 继承于 AbstractList ,实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。 List : 表明它是一个列表,支持添加、删除、查找等操作,并且可以通过下标进行访问。 RandomAccess : 这是一个标志接口,表明实现这个接口的 List 集 2023-09-24 源码 > JDK #集合 #ArrayList
为什么ConcurrentHashMap的key/value不能为空,HashMap可以? 为什么ConcurrentHashMap的key/value不能为空,HashMap可以?以JDK8为例,在ConcurrentHashMap源码的putVal方法中当传入的参数key或者value为null时,会抛出NullPointerException ConcurrentHashMap 的 key 和 value 不能为 null 主要是为了避免二义性。 null 是一个特殊 2023-09-23 JAVA > 集合 #ConcurrentHashMap #HashMap
JDK工具使用指南 JDK工具使用指南jps该命令用于打印当前JVM中运行的Java进程状态信息 1jps [options] [hostid] options表示命令可选参数: -q:仅显示pid -m:显示进程pid及main方法参数 -l:打印进程对应JAR文件所在的完整路径名 -v:查看进程pid及JVM参数 -h:打印帮助信息 jinfo用于打印全部参数和系统属性 1jinfo [options] & 2023-09-23 JDK > 工具 #调优
MySQL分页怎么优化? 前情提要我们刷网站的时候,我们经常会遇到需要分页查询的场景。 比如下图谷歌的翻页功能。 我们很容易能联想到可以用MySQL实现。 假设我们的建表SQL是这样的: 建表SQL大家也不用扣细节,只需要知道id是主键,并且在user_name建了个非主键索引就够了,其他都不重要。 为了实现分页。 很容易联想到下面这样的SQL语句。 1select * from page order by id li 2023-09-22 数据库 > MySQL #数据库 #MySQL #查询优化