自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 面试官:零拷贝技术知道吗?给我讲讲

零拷贝技术 mmap sendfile

2022-01-09 10:23:17 253

原创 MVCC-学习小笔记

先来看看四种事务隔离级别和三种读● 读未提交,一个事务可以读到其他事务做了修改但是还没提交的数据,会出现脏读、不可重复度、幻读等问题;● 读已提交,一个对数据进行了修改的事务要提交之后,其他事务才能读取到,会出现不可重复读和幻读;● 可重复读,同一个事务内多次查询的数据保持一致,会出现幻读;● 串行化,在修改的数据上加读锁和写锁,保持到事务结束后才能释放,因为加了锁,所以效率也降低了不少;● 脏读,一个事务读取到其他事务还未提交的数据;● 不可重复读,一个事务A读取事务,另一个事务B将此数据修改

2021-11-24 22:02:41 322

原创 怎么实现Redis的高可用?

大型互联网公司在项目中使用redis,肯定不会是单点部署redis服务的,因为单点部署一旦宕机,就不可用了。为了实现高可用,通常是将数据库复制多个副本然后部署在不同的服务器上,其中一台挂了其他的机器也可以继续提供服务;Redis实现高可用主要有三种部署模式:主从模式、哨兵模式和集群模式。一、主从模式主从模式中,Redis部署了多台机器,由主节点负责读写操作,而从节点只负责读操作;从节点的数据来自于主节点,其背后的原理就是主从复制机制。...

2021-10-07 19:26:53 1087

原创 说说Redis的常用应用场景

一、缓存说到redis,很多人第一个想到的就是缓存,也是我们用的最多的一个场景;国内外中大型的网站都离不开缓存。合理的利用缓存,比如缓存热点数据,不仅可以提升网站的访问速度,还可以降低数据库DB的压力。并且,Redis相比于memcached,还提供了丰富的数据结构,并且提供RDB和AOF等持久化机制,强的一批。二、排行榜当今互联网应用,有各种各样的排行榜,如电商网站的月度销量排行榜、社交APP的礼物排行榜、小程序的投票排行榜等等。Redis提供的zset数据类型能够实现这些复杂的排行榜。我们来举一个

2021-09-28 15:15:32 432

原创 什么是缓存穿透、缓存雪崩、缓存击穿,如何解决热key问题?

一、缓存穿透问题作为后端的开发人员,我们会遇到这样一个常见的缓存使用方式:读请求来了,先查下缓存,缓存值有值就命中,就直接返回;如果缓存没有命中,就去查询数据库,然后把数据库的值更新到缓存,再返回。1、缓存穿透是什么?缓存穿透: 指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。通俗点来讲,读请求访问时,缓存和数据库都没有这个值,这样就会导致每次对这个值的查询请求都会穿透到数据库,这就是缓

2021-09-27 15:07:59 519

原创 Redis为什么这么快?

1、什么是redis?它主要用来干什么的?Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事

2021-09-25 21:19:06 6690 8

原创 从输入URL到看到网页界面,这之间到底发生了什么?

很多公司面试的时候都会问到这样一个问题:输入URL到看见页面发生了什么? 简单来说,共有以下几个过程:DNS解析发起TCP连接发送http请求服务器处理请求并返回http报文浏览器解析渲染界面连接结束下面我们来看看细节。一、DNS解析DNS解析实际上就是寻找你所需要的资源的过程。 假设你输入www.baidu.com,而这个网址并不是百度的真实地址,互联网中每一台机器都有唯一标识的IP地址,这个才是关键,但是它不好记,乱七八糟一串数字谁记得住啊,所以就需要一个网址和IP地址的转换,也就是D

2021-09-20 22:37:16 387

原创 JAVA中try、catch、finally带return的执行顺序总结

异常处理中,try、catch、finally的执行顺序,大家都知道是按顺序执行的。即,如果try中没有异常,则顺序为try→finally,如果try中有异常,则顺序为try→catch→finally。但是当try、catch、finally中加入return之后,就会有几种不同的情况出现,下面分别来说明一下。也可以跳到最后直接看总结。一、try中带有returnprivate int testReturn1() { int i = 1; try { ...

2021-09-10 15:50:15 150

原创 LRU缓存机制的两种实现:LInkedHashMap实现、自己构建双链表+HashMap实现

问题描述:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数据之

2021-09-05 11:26:39 170

原创 Docker之提交一个镜像以及容器数据卷的使用

1、commit镜像例如:2、容器数据卷3、mysql部署实战

2021-08-28 21:13:47 108 2

原创 Docker常用的基本命令

1、帮助命令帮助文档: docker常用命令帮助文档2、镜像命令

2021-08-26 21:50:07 70 1

原创 Docker是怎么工作的?

Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问!DockerServer接受到DockerClient的指令,就会执行这个命令!如下图所示:我们在使用虚拟机和docker的时候,就会出现这样一个疑问:Docker为什么比VM虚拟机快呢?上面这张图就很客观的说明了这个问题1、Docker有着比虚拟机更少的抽象层。2、Docker利用的是宿主机的内核,VM需要的是Guest os。所以说,新建一个容器的时候,docker不

2021-08-26 14:52:02 398 1

原创 闲聊AQS面试和源码解读---可重入锁、LockSupport、CAS;从ReentrantLock源码来看公平锁与非公平锁、AQS到底是怎么用CLH队列来排队的?

AQS原理可谓是JUC面试中的重灾区之一,今天我们就来一起看看AQS到底是什么?这里我先整理了一些JUC面试最常问的问题?1、Synchronized 相关问题以及可重入锁 ReentrantLock及其他显式锁相关问题1、 Synchronized 用过吗,其原理是什么?2、你刚才提到获取对象的锁,这个“锁”到底是什么?如何确定对象的锁3、什么是可重入性,为什么说Synchronized 是可重入锁?4、JVM对Java的原生锁做了哪些优化?5、为什么说Synchronized是非公平锁?

2021-08-18 14:32:02 376 1

原创 面试官:项目中你是如何保证Redis缓存和数据库的数据一致性的?

在实际开发过程中,缓存的使用频率是非常高的,只要使用缓存和数据库存储,就难免会出现双写时数据一致性的问题,那我们又该如何解决呢?首先,我们先来看看有哪几种一致性的情况呢?一、一致性1、强一致性如果你的项目对缓存的要求是强一致性的,那么请不要使用缓存。这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大。2、弱一致性这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不承诺多久之后数据能够达到一致,但会尽可能地保证到

2021-07-18 09:37:52 1243

原创 单表查询和多表连接查询哪个效率更快?

这段时间在做项目的过程中,遇到一个模块,数据之间的联系很复杂,在建表的时候就很纠结,到底该怎么去处理这些复杂的数据呢,是单表查询,然后在业务层去处理数据间的关系,还是直接通过多表连接查询来处理数据关系呢?通过查阅资料和阅读博客,有以下两个回答:一、《高性能mysql》中的回答很多高性能的应用都会对关联查询进行分解。简单地,可以对每个表进行一次单表查询,然后将结果在应用程序中进行关联。例如,下面这个查询:select * from tagjoin tag_post on tag_post.tag_i

2021-06-21 20:40:44 2806

原创 Java面试高频点---牛客刷题总结(第一周)

1、内部类在Java中,可以将一个类定义在另一个类里面或者一个方法里边,这样的类称为内部类,广泛意义上的内部类一般包括四种:成员内部类,局部内部类,匿名内部类,静态内部类 。1.成员内部类(1)该类像是外部类的一个成员,可以无条件的访问外部类的所有成员属性和成员方法(包括private成员和静态成员);(2)成员内部类拥有与外部类同名的成员变量时,会发生隐藏现象,即默认情况下访问的是成员内部类中的成员。如果要访问外部类中的成员,需要以下形式访问:【外部类.this.成员变量 或 外部类.this

2021-06-06 20:58:29 219 3

原创 昨晚学妹问我PC寄存器是怎么回事?我啪的一下就给她说清楚了!

一、PC寄存器概述JVM中的程序计数寄存器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。简单介绍1、 PC寄存器是一块很小的内存空间,几乎可以忽略不计,也是运行速度最快的存储区域。2、 在

2021-05-26 15:54:17 725 2

原创 Java集合源码分析(十六):LinkedHashMap

LinkedHashMap是HashMap的子类,所以也具备HashMap的诸多特性。不同的是,LinkedHashMap还维护了一个双向链表,以保证通过Iterator遍历时顺序与插入顺序一致。除此之外,它还支持Access Order,即按照元素被访问的顺序来排序,我们熟知的LRUCache底层就依赖于此。一、成员变量先来看看存储元素的结构吧:static class Entry<K,V> extends HashMap.Node<K,V> { Entry<K

2021-05-24 14:53:20 161

原创 Java集合源码分析(十五):HashMap(1.7版本和1.8版本)

HashMap集合是Map这个接口下的实现类中最为常用的一种,也是面试中经常会被问到的问题之一。由于HashMap用到的数据结构较为复杂,与其相关的问题通常不好回答,尤其是在jdk1.8之后,又引入了红黑树结构,其数据结构变得更加复杂,接下来我们就以1.8版本为例,对HashMap进行一波分析,在进行1.8版本之前,我们先来看看1.7版本的,有哪些不足和问题,为什么会在1.8引进红黑树这个结构等等问题。—JAVA JDK 1.7 版本HashMap—JDk1.7版本HashMap中的哈希表实现是数组+链

2021-05-23 21:14:44 298 3

原创 Java集合源码分析(十四):TreeMap

TreeMap是红黑树Java版的实现。如果还有小伙伴对红黑树还不是很了解的话,可以去之前的文章看一看。红黑树能保证对增删改查等基本操作的时间复杂度保持在O(lgN).接下来就让我们一起来看看TreeMap的底层源码。一、TreeMap继承结构从图中我们可以看到,TreeMap继承了父类AbstractMap类,也实现了Cloneable、NavigableMap还有Serializable接口。这几个接口分别能带来什么这里就不一 一说明了。二、Entry类static final class E

2021-05-20 17:02:17 991 8

原创 Java集合源码分析(十三):sortedMap和NavigableMap

由于乱序的数据对查找不利,例如无法使用二分法等降低算法的时间复杂度,如果数据在插入时就排好序,查找的性能聚会提升很多。sortedMap接口就是为这种有序的数据服务的。一、sortedMap接口sortedMap接口需要数据的key支持Comparable,或者可以被指定的Comparator接受。sortedMap主要提供了以下方法:// 返回排序数据所用的ComparatorComparator<? super K> comparator();// 返回在[fromKey, to

2021-05-17 22:27:19 251 1

原创 Java集合源码分析(十二):超级接口Map

我们在前面说到的无论是链表还是数组,都有自己的优缺点,数组查询速度很快而插入很慢,链表在插入时表现优秀但查询无力。哈希表则整合了数组与链表的优点,能在插入和查找等方面都有不错的速度。我们之后要分析的HashMap就是基于哈希表实现的,不过在JDK1.8中还引入了红黑树,其性能进一步提升了。今天我们来说一说超级接口Map。一、接口MapMap是基于Key-Value的数据格式,并且key值不能重复,每个key对应的value值唯一。Map的key也可以为null,但不可重复。在看Map接口的方法前,我

2021-05-17 22:10:38 347 8

原创 Java集合源码分析(十一):LinkedList

首先我们知道,LinkedList的底层实现是一个双向链表,链表与数组的差别我们更是清楚,所以LinkedList弥补了ArrayList增删较慢和效率较低的问题了,但是在改和查方面有逊色于ArrayList,所以在使用时要根据业务场景灵活选择。对于这两个使用最频繁的集合类,掌握他们的源码并正确使用,可以让我们的代码更高效。步入主题,LinkedList既实现了List,又实现了Deque接口,前者使它能够像使用ArrayList一样使用,后者又使它能够承担队列的职责。LinkedList内部结构是一个双

2021-05-17 11:24:15 873 10

原创 Java集合源码分析(十):ArrayList

前面做了这么多准备,终于开始了哈,ArrayList开淦!ArrayList应该是我们使用最频繁的集合类了吧,我们先来看看文档是怎么介绍它的。我们可以知道,ArrayList其实就是Vector的翻版,只是去除了线程安全。ArrayList是一个可以动态调整大小的List实现,其数据的顺序与 插入顺序始终一致,其余特性与List一致。一、ArrayList继承结构从结构图中可以看到,ArrayList是AbstractList的子类,同时实现了List接口。除此之外,它还实现了三个标识型接口,这几

2021-05-16 15:14:31 168 2

原创 Java集合源码分析(九):超级接口List

List接口是Collection接口的三大接口之一,其中的数据可以通过位置检索,用户可以在指定位置插入数据。List的数据可以为空,可以重复。我们来看看api文档是怎么说的:一、List特有的方法我们这里就只关注和Collection不同的方法,主要有以下这些://在指定位置,将指定的集合插入到当前的集合中boolean addAll(int index, Collection<? extends E> c);//这是一个默认实现的方法,会通过Iterator的方式对每个元素进行

2021-05-12 21:07:04 216 5

原创 Java集合源码分析(八):超级接口Collection

Collection是List、Queue和set的超集,它直接继承于Iterable,也就是说所有的Collection集合类都支持foreach循环。除此之外呢,Collection也是面向接口编程的典范,它可以在多种实现类间转换,这就是面向对象编程的厉害之处!一、方法定义我们先想一想,公司如果要我们自己去封装一些操作数组或者链表的工具类,我么需要封装哪些功能呢?不妨就是统计其 大小,增删改查、清空或者是查看否含有某条数据等等。而collection接口就是把这些通常操作提取出来,使其更全面、更通

2021-05-12 10:42:00 137 6

原创 Java集合源码分析(七):Iterable接口

遍历集合我相信大部分coder都会遇到,也经常使用,而Java给我们提供了多种选择,接下来就让我们一起来看看吧!这里我们给定一个集合strings写法1–循环for (int i = 0, len = strings.size(); i < len; i++) { System.out.println(strings.get(i));}写法2–foreach循环for (String var : strings) { System.out.println(var);}

2021-05-10 10:25:37 248 1

原创 Java集合源码分析(六):红黑树(RB Tree)

红黑树和平衡二叉树的构建思想是类似的,都是在插入过程中对二叉排序树进行调整,从而提升性能,它的增删改查均可以在O(lg N)内完成。一、红黑树的定义红黑树是一颗二叉排序树,除了具有二叉排序树的特点与性之外,还具有以下的一些性质:1、 每个节点要么是黑色要么是红色2、 根节点是黑色3、 每个叶节点(NIL)是黑色(这里说的叶节点是指为空的叶子结点)4、 如果一个节点时红色的,则它的两个儿子都是黑色的5、 从一个节点到该节点的子孙节点的所有路劲上包含相同数目的黑节点红黑树示例:每个节点的最后

2021-05-09 21:24:12 461 2

原创 Java集合源码分析(五):平衡二叉树(AVL Tree)

在上一章的文章中,我们讲到了二叉排序树,它很好的平衡了插入与查找的效率,但二叉排序树如果不平衡,那么查找效率就会大大降低,今天要讲的这个平衡二叉树就是一种解决这个问题的方法。一、平衡二叉树的定义平衡二叉树 是一种二叉排序树,其中每一个节点的左子树和右子树的高度差至多等于1 。它是一种高度平衡的二叉排序树。意思是说,要么它是一棵空树,要么它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1 。我们将二叉树上结点的左子树深度减去右子树深度的值称为平衡因子BF (Balance Fac

2021-05-08 22:33:17 198 1

原创 Java集合源码分析(四):二叉排序树

解决查询速度慢的方案除了哈希表外,还可以使用二叉排序树。我们知道,查询慢主要是因为不知道元素的位置,使用hash函数映射虽然解决了问题,但其并不稳定,当出现大量的哈希碰撞后其表现更像一个链表,查询速度大大降低。二叉排序树的方案则是使元素有序,这样便可以使用二分法进行查找了,虽然效率相比hash函数低一些,但可以通过AVL树、红黑树等增加稳定性。HashMap在JDK1.8的实现中,就结合了哈希表的高效和红黑树的稳定,我们之后会详细分析其实现。一、二叉排序树的定义二叉排序树 又称为二叉搜索树,它可以是

2021-05-08 20:49:41 127 1

原创 Java集合源码分析(三):树与二叉树

数组和链表都是用来解决一对一的问题的,而一对多问题则就需要树来解决。这里是为了后续的集合类相关来讲一些基础和概念,如果小伙伴们想更深一步了解的话,可以自己去翻阅相关资料。首先来看看树的定义吧一、树的定义树是N(N>0)个节点的有限集,当N=0是,该树称为空树。在任意一个非空树中:1. 有且仅有一个特定的称为根的节点,即根节点。2. 当N>1时,其余节点可分为M(M>0)个互不相交的有限集T1、T2、T3、…Tm,其中每一个集合本身又是一棵树,并且称为根的子树。图示:注:子

2021-05-08 20:36:23 133 1

原创 Java集合源码分析(二):哈希表

在Java集合源码分析(一):数组和链表的讨论中,我们知道数组和链表在查询方面都表现得很吃力,想要知道一个元素是否在数组中,只能一个一个去遍历对比。这个问题的根源就在于我们没有办法根据一个元素去找到他的存储地址,那又没有办法或者技术可以解决这个问题呢?当然有!哈希表就是解决查询问题的一种方案。在后续将会分析的二叉排序树中,还会将数据排序以进行二分查找,将时间复杂度从O(n)降低到O(lg n)。一、哈希表和哈希函数简单的来讲,哈希表就是通过关键字来获取数据的一种数据结构,它通过把关键字映射为表中的位置

2021-05-08 11:41:31 152 1

原创 java集合源码分析(一):数组与链表

数组和链表是数据结构中最基本的部分,也是众多数据结构的基础。在Java中这两种结构的使用也很广泛。今天就让我们来进行简要分析。一、数组在Java中,数组是被定为一种基本类型,其可以通过下标获取到对应位置的数据。那么这边结构在内存中是怎么存放的呢?正如上图所示,数组在内存中是一段连续的存储单元,每个数据依次放在每个单元中。分析这种结构,我们可以得出以下几个结论:1. 创建一个数组,必须声明其长度,这样在内存中可以寻找合适的一段连续存储单元,也就是数组的大小是固定的,我们无法动态调整其大小。2.

2021-05-08 10:27:27 121 1

原创 Java 8新特性之Lambda表达式

1、Lambda表达式的概念lambda表达式是Java8的一个新特性,也是最值得学的新特性之一。lambda表达式从本质上讲,是一个匿名函数,可以使用这个匿名函数,实现接口中的方法,对接口进行简单的实现,从而简化代码。在写lambda表达式的时候,不需要关心方法名是什么!2.Lambda表达式的使用场景例如:设计接口的实现类、使用匿名内部类,但是lambda表达式比这两种方式都简单。lamnda表达式通常是用来简化接口实现。但注意了不是所有的接口都可以使用lambda表达式去简介实现的Lam

2021-05-04 17:12:34 247 1

原创 JDK1.8之八大基本数据类型及其包装类对象

1.位、字节、字的概念位:二进制数中的一个位数,可以是0或者1字节:计算机中的基本单位,每8个位组成一个字节字:两个字节为一个字1 byte = 1B例子:下面的每个单位为0或者1的单位是位,其中01011010都是一个字节,两个字节拼接起来组成的0101101010110101是一个字2.Java的简单类型及其封装类Java基本类型共有八种,基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又

2021-05-04 11:43:28 404 1

原创 坐稳了!带你入手一波双亲委派机制和沙箱安全机制。

1.双亲委派机制工作原理1)、如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行。2)、如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的的启动类加载器。3)、如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派机制。2.工作原理图示3.简单代码实现:在项目模块中建立java.lang.String类package java.lang;/**

2021-05-03 13:42:08 134 1

原创 类的加载器以及类加载过程

1.类的加载图示2.简述类的加载过程当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载、类的链接、类的初始化这三个步骤来对类进行初始化。如果不出现意外,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或者初始化*1.阶段一:加载-Loading类的加载指的是将类的.class文件中的二进制数据读取到内存中,存放在运行时数据区的方法区中,并创建一个大的Java.lang.Class对象,用来封装方法区内的数据结构*2.阶段二:链接-Linking①. 验证

2021-05-02 18:12:07 278 6

原创 准备好了吗?带你读底层!深入理解CAS ,从juc原子类一路追溯到unsafe类再到ABA原子引用!

一:什么是CAS?CAS,在Java并发应用中通常指CompareAndSwap或CompareAndSet,即比较并交换。CAS是一个原子操作 是用于实现多线程同步的原子指令,它比较一个内存位置的值并且只有相等时修改这个内存位置的值为新的值,保证了新的值总是基于最新的信息计算的,如果有其他线程在这期间修改了这个值则CAS失败。CAS返回是否成功或者内存位置原来的值用于判断是否CAS成功。这里我们用一段短代码来说明:这里我们用AtomicInteger类来做测试,其底层也是用CAS原理实现的 ,这个

2021-04-29 21:53:06 100 1

原创 就算错过,也不进来看看?volatile保证可见性、非原子性以及避免指令重排(内存屏障)详解

一.JMM–Java内存模型*1.什么是JMM?JMM : Java内存模型,不存在的东西,是一种概念!是一种约定!*2.关于JMM的一些同步的约定:1、线程解锁前,必须把共享变量立刻刷回主存。2、线程加锁前,必须读取主存中的最新值到工作内存中!3、加锁和解锁是同一把锁。线程工作时,会有自己的一个工作内存,它会主内存之间有相关联系,有八种操作,具体看下列解释和图例:内存交互操作有8种,虚拟机实现必须保证每一个操作都是原子的,不可在分的(对于double和long类型的变量来说,load、st

2021-04-28 19:55:37 271 1

原创 异步回调,用一个例子带你起飞!

1.Future接口Future 设计的初衷: 对将来的某个事件的结果进行建模异步回调:这里基本不怎么直接使用future,而是使用它的一个实现类CompletableFuture,这个类的很多方法都是加强了的,比较怕常用。2.CompletableFuture类接下俩就让我们用一个小例子来看看这个类是怎么来操作异步回调的吧3.简单代码实现*没有返回值的情况:import java.util.concurrent.CompletableFuture;import java.util.

2021-04-27 22:31:07 176 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除