随笔分类 - Java
摘要:springboot下用cache注解整合redis并使用json序列化反序列化。 cache注解整合redis 最近发现spring的注解用起来真的是很方便。随即产生了能不能吧spring注解使用redis实现的方式。 只需要在配置文件中(application.propertoes)添加如下一个
阅读全文
摘要:CountDownLatch解析 CountDownLatch是什么 CountDownLatch是基于AQS的阻塞工具,阻塞一个或者多个线程,直到所有的线程都执行完成。 CountDownLatch解决了什么问题 当一个任务运算量比较大的时候,需要拆分为各种子任务,必须要所有子任务完成后才能汇总为
阅读全文
摘要:并发之AQS原理(二) CLH队列与Node解析 1.CLH队列与Node节点 就像通常医院看病排队一样,医生一次能看的病人数量有限,那么超出医生看病速度之外的病人就要排队。 一条队列是队列中每一个人的组织形式。那么每个人决定怎么看待自己在队列中的形态决定了整个队列的形态。比如当每个人都遵守先来后到
阅读全文
摘要:并发之AQS原理(三) 如何保证并发 1. 如何保证并发 AbstractQueuedSynchronizer 维护了一个 state (代表了共享资源)和一个FIFO线程等待队列(多线程竞争资源被阻塞时会将线程放入此队列)。 由于state是由volatie修饰的所以该变量的改动都是立等可见的。
阅读全文
摘要:并发之AQS原理(一) 如果说每一个同步的工具各有各的强大,那么这个强大背后是一个相同的动力,它就是AQS. AQS是什么 AQS是指java.util.concurrent.locks包里的AbstractQueuedSynchronizer类,抽象的FIFO队列式的同步器,AQS定义了一套多线程
阅读全文
摘要:只需要将接口文件的日志设置为debug即可。 例如你的mapper接口所在的文件夹是 com.demo.mapper 那么在application.properties配置文件中添加
阅读全文
摘要:关于java中Stream理解 Stream是什么 Stream:Java 8新增的接口,Stream可以认为是一个高级版本的Iterator。它代表着数据流,流中的数据元素的数量可以是有限的, 也可以是无限的。 Stream跟Iterator的差别是 无存储 :流是基于数据源的对象,它本身不存储数
阅读全文
摘要:java中的双冒号操作符 定义 双冒号运算操作符是类方法的句柄,lambda表达式的一种简写,这种简写的学名叫eta conversion或者叫η conversion。 通常的情况下: 把 x System.out.println(x) 简化为 System.out::println 的过程称之为
阅读全文
摘要:并发之线程封闭与ThreadLocal解析 什么是线程封闭 实现一个好的并发并非易事,最好的并发代码就是尽量避免并发。而避免并发的最好办法就是线程封闭,那什么是线程封闭呢? 线程封闭(thread confinement) 当前线程的变量不与其他线程共享,只在自己的线程中使用。 线程封闭的实现 1.
阅读全文
摘要:并发之不可变对象 什么是不可变对象 不可变对象 :一个对象的状态在对象被创建之后就不再变化。不可变对象对于缓存是非常好的选择,因为你不需要担心它的值会被更改。 必须满足三个条件才可以称之为不可变对象 1. 对象创建完成后其状态不可修改。(数据私有并且没有对状态的修改方法) 2. 对象的所有域都是fi
阅读全文
摘要:并发之atomic与CAS自旋锁 通过前几章的讲解我们知道i++这种类似操作是不安全的。针对这种情况,我们可能会想到利用synchronize关键字实现线程同步,保证++操作的原子性,的确这是一种有效的方法,但我们还有一种选择 AtomicInteger。 AtomicInteger解析 源码 成员
阅读全文
摘要:并发之synchronized关键字的应用 synchronized关键字理论基础 前两章我们学习了下java内存模型的相关知识, 现在我们来讲讲逢并发必出现的synchronized关键字。 作用 synchronized是Java中的关键字,是一种同步锁。依赖JVM实现。 JMM对synchro
阅读全文
摘要:volatile关键字 volatile关键字是什么 在上一章我们讲到了并发的的三个概念,那么今天在讲解下在java中可以保证可见性和有序性的一个关键字。 volatile关键字 :当变量的值被该关键字修饰后该值任何读写操作对于其他线程是立即可见的。并且被关键字修饰后的变量被禁止重排序。 volat
阅读全文
摘要:死磕并发之可见性、有序性、原子性 原子性 原子性(Atomicity):一个操作是不可中断的,要么全部执行成功要么全部执行失败。 在典型的转账场景中,入账和出账操作要么同时成功,要么同时失败。其操作过程是一个整体不可分割,这种操作就是原子性的操作。 通过上面的伪代码来解释下什么是原子性操作。首先ja
阅读全文
摘要:Java内存模型JMM java内存模型定义 上一遍文章我们讲到了CPU缓存一致性以及内存屏障问题。那么Java作为一个跨平台的语言,它的实现要面对不同的底层硬件系统,设计一个中间层模型来屏蔽底层的硬件差异,给上层的开发者一个一致的使用接口。Java内存模型就是这样一个中间层的模型,它为程序员屏蔽了
阅读全文
摘要:CPU缓存一致性协议MESI CPU高速缓存(Cache Memory) CPU为何要有高速缓存 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU。这就造成了高性能能的内存和硬盘价格及其昂贵。然而CPU的高度运算需要高速的数据。为了解决这个问题,CPU厂
阅读全文
摘要:线程安全的日期处理 依赖 用法 String Date Date String
阅读全文
摘要:lambda是什么 “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义
阅读全文
摘要:1.Base64编码算法 Base64简介 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。 Base64编码是从二进制到字符的过程,可用于在HTTP环境
阅读全文
摘要:1.强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。 2.软引用(SoftRefer
阅读全文

浙公网安备 33010602011771号