![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
晋升板块
骑士李四
专心做好技术的人
展开
-
ES搜索引擎的使用完整代码
ES(ElasticSearch)搜索引擎,ES搜索引擎的使用完整代码、es的代码过程原创 2022-02-26 20:43:37 · 652 阅读 · 0 评论 -
CountDownLatch的使用
当某项工作需要由若干项子任务并行地完成,并且只有在所有的子任务结束之后(正常结束或者异常结束),当前主任务才能进入下一阶段,CountDownLatch工具将是非常好用的工具,并且其所提供的操作方法还是线程安全的。考虑一个场景:,我们需要调用某个品类的商品,然后针对活动规则、会员等级、商品套餐等计算出陈列在页面的最终价格(这个计算过程可能会比较复杂、耗时较长,因为可能要调用其他系统的接口,比如ERP、CRM等),最后将计算结果统一返回给调用方。简单的一个代码使用案例: final Co原创 2021-02-19 12:26:15 · 143 阅读 · 0 评论 -
Redis的使用场景
1、缓存2、分布式session3、set NX EX 做分布式锁4、incr 全局ID5、incr 计数器6、incr 限流7、位操作原创 2021-01-02 16:40:43 · 90 阅读 · 0 评论 -
redis数据结构的使用场景
数据类型:String、列表List、集合Set、有序集合SortedSet及哈希Hash存储1.String字符串很常见,不用多说,当然我们也可以吧一个对象通过ObjectMapper等JSON解析框架进行序列化与反序列化,从而将对象转化为JSON格式的字符串,存起来。package com.debug.middleware.server; //导入包 import com.debug.middleware.server.entity.Person; import原创 2020-12-12 00:03:28 · 232 阅读 · 3 评论 -
springboot整合Redis详解完整篇
我们现在项目大都使用springboot,那如何在springboot中加入redis呢?主要有以下这几步:1.需要加入Redis的依赖Jar,代码为:<! -redis依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <v原创 2020-12-11 22:58:41 · 10835 阅读 · 2 评论 -
并发编程文章集合
1. 线程的生命周期和使用2. 线程安全与锁的理解和使用3 .volatile关键字的原理,作用,使用4 .java内存模型最详细的理解5. JMM中的happen-before规则6. Synchronized的使用及原理理解7. JUC并发包之 Lock详解8. JUC并发包之ReentrantLock原理详解9. 5分钟理解ConcurrentHashMap的原理和应用场景...原创 2020-12-11 22:06:30 · 103 阅读 · 0 评论 -
5分钟理解ConcurrentHashMap的原理和应用场景
ConcurrentHashMap的应用场景ConcurrentHashMap是J.U.C包里面提供的一个线程安全并且高效的HashMap,所以ConcurrentHashMap在并发编程的场景中使用的频率比较高。ConcurrentHashMap源码分析:ConcurrentHashMap和HashMap的实现原理是差不多的,但是因为ConcurrentHashMap需要支持并发操作。JDK1.7和Jdk1.8版本也有变化。先说说1.7版本:1.7 的时候,ConcurrentHashMap 采原创 2020-11-18 23:53:01 · 3431 阅读 · 0 评论 -
3分钟了解清楚Nginx的功能
什么是nginx?Nginx是一款免费开源的高性能HTTP服务器及反向代理服务器(ReverseProxy)产品,同时,它还可以提供IMAP/POP3代理服务等功能。nginx的功能Nginx提供的基本功能服务从大体上归纳为基本HTTP服务、高级HTTP服务和邮件服务。Nginx提供基本HTTP服务,可以作为HTTP代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤功能,支持SSL等。总结的来说,常用ngnix的功能是:反向代理功能、负载均衡功能、Web缓存原创 2020-11-15 18:57:21 · 144 阅读 · 0 评论 -
被领导一直催促,@时候怎么办?
当被一大堆 当时看来无厘头的事情打击时,当被外界源源不断的压力催促时,请不要被他们左右,请平静自己的内心,请收起你的谩骂,请停止你的咆哮,请找回稳定的自己,仔细思考问题,慢慢来,一切百思不得其解的问题都会拨云见日。回过头来看,其实没有什么解决不了的,所有的问题都会被解决,如果没有,只是在那个时刻的你浮躁,不安静,没有用正确的方法和态度去思考解决办法。加油,自己! 加油,走在撸代码道路上的人!加油,追梦少年!原创 2020-11-07 21:16:07 · 1805 阅读 · 0 评论 -
JUC并发包之ReentrantLock原理详解
我们都知道ReentrantLock主要利用CAS+AQS队列来实现。那么什么是CAS,AQS呢?什么是AQS?同步队列 AQS,全称 AbstractQueuedSynchronizer。就是用来同步队列的。AQS 的功能分为两种:独占和共享。独占锁,每次只能有一个线程持有锁,比如前面给大家演示的 ReentrantLock 就是以独占方式实现的互斥锁共 享 锁 , 允 许 多 个 线 程 同 时 获 取 锁 , 并 发 访 问 共 享 资 源 , 比 如读写锁ReentrantReadWri原创 2020-10-26 00:12:48 · 222 阅读 · 5 评论 -
JUC并发包之 Lock详解
java.util.concurrent,并发编程常用的工具类:包含了线程池、阻塞队列、计时器、同步器、并发集合等 作者:Dong Lea。LockLock 本质上是一个接口,它定义了释放锁和获得锁的抽象方法,定义成接口就意味着它定义了锁的一个标准规范,也同时意味着锁的不同实现。Lock 有很多的锁的实现,但是直观的实现是 ReentrantLock 重入锁。1.ReentrantLock:表示重入锁,表示支持重新进入的锁,它是唯一一个实现了 Lock 接口的类。重入锁指的是线程在获得锁之后,再原创 2020-10-25 18:07:14 · 312 阅读 · 3 评论 -
Synchronized的使用及原理理解
1,synchronized的使用synchronized 有三种方式来加锁,分别是修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。不同的修饰类型,代表锁的控制粒度。在这里插入代码片2,锁是如何存储的1>对象在内存中的布局:(对象是怎么存储的)在 Hotspot 虚拟机中,对象在内存中的存储布局,可以分为三个区域原创 2020-10-21 23:17:17 · 308 阅读 · 0 评论 -
JMM中的happen-before规则
HappenBefore 它的意思表示的是前一个操作的结果对于后续操作是可见的,所以它是一种表达多个线程之间对于内存的可见性。JMM 中有哪些方法建立 happen-before 规则1,程序顺序规则2,volatile 变量规则,对于 volatile 修饰的变量的写的操作,一定 happen-before 后续对于 volatile 变量的读操作;3,传递性规则4、start 规则5,join 规则6,监视器锁的规则...原创 2020-10-21 23:01:48 · 154 阅读 · 0 评论 -
java内存模型最详细的理解
java内存模型JMMJMM属于语言级别的抽象内存模型,它定义了共享内存中多线程程序读写操作的行为规范。通过这些规则来规范对内存的读写操作从而保证指令的正确性,它解决了 CPU 多级缓存、处理器优化、指令重排序导致的内存访问问题,保证了并发场景下的可见性。JMM 抽象模型分为主内存、工作内存;主内存是所有线程共享的。工作内存是每个线程独占的,线程对变量的所有操作都必须在工作内存中进行,不能直接读写主内存中的变量,线程之间的共享变量值的传递都是基于主内存来完成。工作内存与主内存交互java虚拟机中主内原创 2020-10-21 22:49:23 · 101 阅读 · 0 评论 -
volatile关键字的原理,作用,使用
1.volatile的作用volatile 可以使得在多处理器环境下保证了共享变量的可见性。什么是可见性呢?在多线程环境下,读和写发生在不同的线程中的时候,可能会出现:读线程不能及时的读取到其他线程写入的最新的值。这就是所谓的可见性。volatile 关键字是如何保证可见性的?使用【hsdis】这个工具,查看lock汇编指令,在多处理器环境下,lock 汇编指令可以基于总线锁或者缓存锁的机制来达到可见性的一个效果。可见性的本质总结:由于 CPU 高速缓存的出现使得 如果多个 cpu 同时缓存了原创 2020-10-20 00:09:13 · 344 阅读 · 2 评论 -
线程安全与锁的理解和使用
1,线程安全线程安全性是指管理数据的状态,线程安全,其实是指内存中数据的安全,在堆内存中的数据由于可以被任何线程访问到,在没有限制的情况下存在被意外修改的风险。2,如何解决线程安全的问题1,私有例如:局部变量,数据是放在线程的栈内存。A线程来执行这个方法,这些变量会在A的栈内存分配。与此同时,B线程也来执行这个方法,这些变量也会在B的栈内存中分配。就是说这些局部变量会在每个线程的栈内存中都分配一份。由于线程的栈内存只能自己访问,所以栈内存中的变量只属于自己,其它线程根本就不知道。所以局部变量肯原创 2020-10-13 21:02:18 · 279 阅读 · 2 评论 -
线程的生命周期和使用
1.线程的生命周期:线程一共有 6 种状态(NEW、RUNNABLE、BLOCKED、WAITING、TIME_WAITING、TERMINATED)NEW:初始状态,线程被构建,但是还没有调用 start 方法。RUNNABLED:运行状态,JAVA 线程把操作系统中的就绪和运行两种状态统一称为“运行中”BLOCKED:阻塞状态,表示线程进入等待状态,也就是线程因为某种原因放弃了 CPU 使用权,阻塞也分为几种情况➢ 等待阻塞:运行的线程执行 wait 方法,jvm 会把当前线程放入到等待原创 2020-10-12 08:30:22 · 2103 阅读 · 2 评论