自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 为什么说高并发下ArrayList不安全

高并发下进行多线程操作,ArraytList.add()的时候modCount都会自增1,当我们依次输出每个线程的list时其本质是底层产生一个迭代器,会定义一个expectedModCount。所以当输出语句执行的时候,可能有多个线程在执行add()操作。分别把错误的异常都截出,我们来看看底层代码。B线程此时进行add()操作,对modCount进行+1,造成此时全局变量modCount = 2。A线程此时正在进行输出操作,expectedModCount = modCount = 1;

2023-04-21 15:24:53 434 2

原创 单例模式-双重检验锁

所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。java.lang.Runtime就是经典的单例模式。

2023-03-28 18:35:27 140 1

原创 static、final关键字、枚举、Synchronized

访问修饰符 static 数据类型 变量名;[推荐]static 访问修饰符 数据类型 变量名。final中文意思:最后的,最终的.final可以修饰类、属性、方法和局部变量在某些情况下,程序员可能有以下需求,就会使用到final:1)当不希望类被继承时,可以用final修饰.【案例演示】2)当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final关键字修饰。【案例演示:访问修饰符 final返回类型方法名】

2023-03-28 16:28:33 340 2

原创 类加载时机及顺序

动态加载:如果a类引入b类的代码,不同的是a类不存放b类代码,等待a需要使用到b类中的代码时,才会去找b类中的代码进行执行。静态加载: 如果a类引入了b类的代码,相当于把 b类中的代码放在了a类中使用。

2023-03-28 11:12:30 333 2

转载 队列之Java实现循环队列

什么是队列?队列(queue)又叫先进先出表,它是一种运算受限的线性表。其限制是只允许在表的一端进行插入数据和另一端取数据。插入数据的一端是队尾,取数据的一端是队头。队列的数据结构:数组或者链表实现队列的常用场景:生产者生产数据放入队列缓存,消费者去消费数据。

2023-03-24 16:56:10 1360

转载 栈之Java实现数据结构

栈(stack)又叫先进后出表,它是一种运算受限的线性表。它只允许在表的一端进行插入和删除操作,我们称之为栈顶,相对另一端称为栈底。我们可以通俗一点,将栈比喻为一个垃圾桶,垃圾桶底就类似我们的栈底(bottom),垃圾桶口就类似我们的栈顶(top),当有第一个垃圾扔进去时肯定在最底上,直至桶满,我们把垃圾往出倒肯定是最后扔进去的垃圾最先出来。这就类似我们的栈元素先进后出,用一张图来进行表示:栈有两个基本操作:(1)进栈:入栈或压栈,将新元素放到栈顶元素的上面,使之成为新的栈顶元素;

2023-03-24 16:54:59 329

转载 Java单链表实现LRU内存缓存淘汰算法

在了解什么是LRU算法时,得先清楚软件有哪些缓存,软件缓存分为:1、内存缓存;2、数据库缓存;3、网络缓存;速度依次减慢,缓存到内存中的数据,长时间可能会有一些无用的数据占用内存甚至导致内存雪崩的发生,为了解决这些,产生了LRU(Least Recently Used)算法。LRU算法只是解决问题的其中一种,还有包括FIFO(First In, First Out),LFU(Least Frequently Used)算法。这里我们只讲LRU算法的实现。

2023-03-24 16:52:31 197

转载 链表之Java实现双向链表

定义:链式存储结构的特点是用一组任意的存储单元存储线性表的 数据元素,这组存储单元可以是连续的,也可以是不连续的。物理存储结构如下:图中每一个节点均代表存储的数据,并且都包含该节点的下一个节点的位置信息。

2023-03-24 16:50:49 503

转载 数据结构线性表之顺序表LinkedList

根据LinkedList内部数据结构特性,非常适合增加,删除操作。凡事不是绝对的,只是和ArrayList相比之下更适合,真正的使用还得放到生产环境中去决定到底是用什么合适。

2023-03-24 16:49:55 150

转载 数据结构线性表之顺序表ArrayList

ArrayList作为容器,加上前面已经分析过它的源码,则可以确定出:(1)在ArrayList的尾部插入效率高,随机访问效率高(内部是一个数组)。(2)但是如果要在中间插入或者删除则效率低(需要对数组里面的节点进行位移操作arraycopy非常耗时)。(3)使用for循环时不要轻易使用remove方法(即使不报错,可能运行结果和预期结果也会不一致)。(4)非要使用remove方法,建议使用迭代器的remove方法。(4)遍历时推荐使用迭代器,不推荐使用for循环。

2023-03-24 16:35:32 112

空空如也

空空如也

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

TA关注的人

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