03 2020 档案
摘要:先聊下redis普通的分布式锁,用 1.单节点、主从/哨兵模式的分布式锁,安全吗? 或许你了解过,通过如下方式加锁: 设置锁时,使用set命令,因为其包含了setnx,expire的功能,起到了原子操作的效果,给key设置随机值,并且只有在key不存在时才设置成功返回True,并且设置key的过期时
阅读全文
摘要:Synchronize是重量级锁吗?是互斥锁吗? 它的实现原理? 前言 线程安全是并发编程中的重要关注点,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多个线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时
阅读全文
摘要:或许你经常被问到? Volatile关键字有何作用? 实现这些作用的底层如何实现? Volatile能够保障可见性、有序性?原子性吗? 前言 我们都知道,Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用
阅读全文
摘要:读了本文,你会知道,为什么不加volatile关键字的单例模式不是线程安全的 有经验的开发者都知道双重锁定检查(DCL,Double Check Lock)的单例是最优秀的,如下文所示: 1 public class Singleton { 2 private static Singleton in
阅读全文
摘要:一张图搞明白Java线程状态 1,如图所示,总共有6个状态
阅读全文
摘要:若你不明白下面的问题,可以继续看。 1.线程正在执行,interrupt可以打断吗?sleep可以打断吗? 2.stop 和interrupt有什么区别? 话不多说,上代码 1 /** 2 * Descritpion: 3 * 4 * @auther wangpeng 5 * @create 202
阅读全文
摘要:底层实现数据结构 1.7数组+链表 思考:为什么不用双向链表 1.8+的数组+链表+红黑树 一些重要的变量 //默认初始容量16 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //容量最大值 static final int MAXIMUM_
阅读全文
摘要:参考:https://www.jianshu.com/p/bae8291d9ab8 快速排序Java实现 leilifengxingmw关注赞赏支持
阅读全文
摘要:基本概念 Roaring BitMap 以下简称 RBM,中文翻译为咆哮位图,它本质上是定义了一个很大的 bit 数组,每个元素对应到 bit 数组的其中一位,一个Integer是32-bit, 一共有Integer.MAX_VALUE = 2 ^ 32个值,32-bit的unsigned inte
阅读全文
摘要:ThreadLocal 其本质上就是避免共享 正所谓是没有共享,就没有伤害.下面来看看ThreadLocal 的源码,Thread类中包含了一个threadLocals变量,它是一种ThreadLocal.ThreadLocalMap类型,该类型定义在ThreadLocal类里面,也就是一个内部类。
阅读全文
摘要:Copy-on-Write模式一种延时策略,只有在真正需要复制的时候才复制,而不是提前复制好,同时 Copy-on-Write 还支持按需复制. Copy-on-Write 最大的应用领域还是在函数式编程领域函数式编程的基础是不可变性(Immutability),所以函数式编程里面所有的修改操作都需
阅读全文
摘要:不变性(Immutability)模式 所谓不变性,简单来讲,就是对象一旦被创建之后,状态就不再发生变化。换句话说,就是变量一旦被赋值,就不允许修改了(没有写操作);没有修改操作,也就是保持了不变性。 一、如何让一个类具有不变性呢 将一个类所有的属性都设置成 final 的,并且只允许存在只读方法,
阅读全文
摘要:众所周知,每一个HTTP响应都会带有一个状态码,不过对于很多开发者来说,平时使用最多的几个状态码无外乎就是200、400、404、500等。 那其 他众多状态码该应用在何种场景中,什么时候应该使用哪些状态码就成为一个值得我们深入思考的问题了。即便在Facebook这样的公司中,那些聪明的开发者所构建
阅读全文
摘要:背景: SpringBoot盛行的当下,如果你工作中负责的项目,还是基于SSM 、Struct等,那么你已经OUT了,建议你提出建议,改造自己的项目,或者平时加班多改造项目,等测试环境运行没问题,跟领导提下,彻底切换,也会让领导刮目相看。SpringBoot跟SSM 相比,好比IDEA编辑器跟win
阅读全文
摘要:一、什么是SPI(Service provider interface) 是JDK内置的一种服务发现机制。例如有个接口,在运行时态给它添加实现,只需要添加一个实现就可以了。 举个栗子: java.sql.Driver接口,其他不同厂商可以针对通一个接口做出不同的实现,mysql,orace等数据库都
阅读全文
摘要:Stream将List转换为Map,使用Collectors.toMap方法进行转换。 背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象 1、指定key-value,value是对象中的某个属性值。 Map<Integer,String>
阅读全文
摘要:目前一个询价应用,这个应用需要从三个电商询价,然后保存在自己的数据库里。核心示例代码如下 ,由于是串行的,所以性能很慢 1 // 向电商 S1 询价,并保存 2 r1 = getPriceByS1(); 3 save(r1); 4 5 // 向电商 S2 询价,并保存 6 r2 = getPrice
阅读全文
摘要:什么是异步化? 将串行执行的流程任务,拆分成多线程操作,可以实现异步化编程。异步编程,也能使程序更快。 java中的异步编程类CompletableFuture 我们先来看一个例子: 泡茶的过程,我们分了 3 个任务:任务 1 负责洗水壶、烧开水,任务 2 负责洗茶壶、洗茶杯和拿茶叶,任务 3 负责
阅读全文
摘要:一.获取线程执行的结果 很多场景下,我们需要获取线程执行完的结果 。而ThreadPoolExecutor 提供的 3 个 submit() 方法和 1 个 FutureTask 工具类来支持,如图,3个submit()方法如下,返回的是Future接口。 View Cod 1 public cla
阅读全文
摘要:有没有思考过,为什么要用线程池? 想必你已经猜到,Java创建对象,仅在JVM堆中分配一块内存,创建线程,却需要调用操作系统API,操作系统再分配一系列资源,是一个非常耗时,好资源的过程。惯用思想,池化资源,得到共用。 想法没错,但是java的自带的线程池并不是采用池化资源来设计的,而是生产者-消费
阅读全文
摘要:IDEA用了很长时间,你是否关系过它其他的实用的小功能。 一、快速展示UML类图 最近研究源码,想看类图,琢磨了下IDEA可以实现。并且可以添加其他类 1.在打开的类中,右键,如图 2.想看其他类呢?
阅读全文
摘要:Java SDK 并发包里提供的原子类内容很丰富,我们可以将它们分为五个类别:原子化的基本数据类型、原子化的对象引用类型、原子化数组、原子化对象属性更新器和原子化的累加器。这五个类别提供的方法基本上是相似的,并且每个类别都有若干原子类,你可以通过下面的原子类组成概览图来获得一个全局的印象。 1. 原
阅读全文
摘要:经典的ABA问题: ABA问题存在CAS无锁方案中,我们写一个CAS的伪代码栗子: class SimulatedCAS{ volatile int count; int newValue; //实count+=1 addOne(){ do { newValue=count+1; //① }whil
阅读全文
摘要:举个栗子: 原子性问题我们前面一直都是采用的互斥锁方案。 其实对于简单的原子性问题,还有一种无锁方案。Java SDK 并发包将这种无锁方案封装提炼之后,实现了一系列的原子类。 下面 Test中add的方法在,在多线程的情况下count最终可能<100000;因为 add 方法是非线程安全的。 1
阅读全文

浙公网安备 33010602011771号