
拓展小知识
文章平均质量分 51
Java训练员
把算法刻入骨髓,程序就是我的灵魂
展开
-
Java8新特性之consumer的用法
consumer是一个函数式接口(可以采用lambda写法),它的源码如下@FunctionalInterfacepublic interface Consumer<T> { void accept(T t); default Consumer<T> andThen(Consumer<? super T> after) { Objects.requireNonNull(after); return (T t) -&原创 2022-02-10 18:36:12 · 17252 阅读 · 0 评论 -
多线程环境下的读写分离思想
一、场景当我们在多线程的环境下操作一个集合,比如 ArrayList或者Hashmap,这些集合默认情况下肯定是线程不安全的,如果说多个线程同时去读和写这些集合就会有线程安全问题。好,问题来了,我们应该怎么让一个集合变成线程安全的呢?二、synchronized 或者lock锁有一个非常简单的办法,对这些集合的访问都加上线程同步的控制,或者说是加锁。这里可以去另一篇文章看一下Synchronized和lock锁的原理简述synchronized和lock锁最简单的做法就是加一个Synchroni原创 2021-10-20 12:55:28 · 1308 阅读 · 0 评论 -
简述synchronized、lock和原子类的原理
一、Synchronizedsynchronized是一个基于jvm的重量级的锁,他可以保证线程的绝对安全,但是也有一些问题:比如它是非公平的,它的性能不高。它的底层原理实际上是在jvm有一个是类似于计数器的东西叫做monitor,它默认情况下是0,但我们加锁的时候就+1变为1,解锁就是-1变为0,由于Synchronized是一个对象锁,所以它只能允许带有对象头的对象来进行加锁解锁操作,当对象进行加锁时会执行指令monitor enter,当解锁时执行monitor exit。除此之外它还有一些特性原创 2021-10-20 11:56:00 · 281 阅读 · 0 评论 -
布隆过滤器是什么?
布隆过滤器通过多个哈希函数生成多个哈希值,把生成的哈希值所在的bit位变为1,这样相对于hashmap,布隆过滤器存储占用更小的内存,但是缺点也很明显,就是去查一个值,如果算出来的每个bit位上都为1,也只能说它是可能存在,不能确定它一定存在,因为这些1可能是很多别的数据存储所生成的1。还有一个缺点就是传统的布隆过滤器不支持删除操作。...原创 2021-09-12 14:57:59 · 114 阅读 · 0 评论