- 博客(171)
- 收藏
- 关注
原创 ArrayBlockingQueue与LinkedBlockingQueue底层原理
ArrayBlockingQueue是一个阻塞的队列,继承了AbstractBlockingQueue,间接的实现了Queue接口和Collection接口。底层以数组的形式保存数据,所以它是基于数组的阻塞队列。ArrayBlockingQueue是有边界值的,在创建ArrayBlockingQueue时就要确定好该队列的大小,一旦创建,该队列大小不可更改。内部的全局锁是使用的。方法做法put如果队列满了,就阻塞,当队列不满的时候,会再执行入队操作offer如果队列满了,返回false。
2024-03-15 22:29:28 445
原创 ThreadLocal基本原理
ThreadLocal是java中所提供的线程本地存储机制,可以利用改机制将数据缓存在线程内部,该线程可以在任意时刻、任意方法中获取数据。
2024-03-14 22:43:11 454
原创 sentinel整合nacos在gateway中实现限流
OverrideR error = R.error(500, "限流啦 别在试啦");});
2024-02-24 16:10:01 1337
原创 并发控制工具类CountDownLatch、CyclicBarrier、Semaphore
让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒,CountDownLatch主要有2个方法,当一个或多个线程调用await方法时,调用线程会被阻塞,其他线程调用countDown方法时计数器减一(调用countDown方法不会阻塞线程),当计数器的值变为0时,因为调用方法被阻塞的线程会被唤醒,继续执行。N个线程相互等待,任何一个线程没有到达或完成时,所有的线程都必须互相等待。(信号量)可以用来限制能同时访问共享资源的线程上限,它内部维护了一个许可的变量,也就是线程许可的数量。1 收集到:1颗龙珠。
2023-12-22 23:13:37 441
原创 java常见的锁的类型
每个线程在获取锁时会先查看此锁维护的等待队列,如果为空或当前线程是等待队列的第一个,就占有锁,否则就加入到等待队列中,以后会FIFO的规则来从队列获取锁ReentrantLock的创建可以指定构造函数的boolean类型来指定得到公平锁或非公平锁,如果不写默认是false-非公平锁。读写锁的内部包含两把锁:一把是读(操作)锁,是一种共享锁;指的是同一线程外层函数获得锁之后,内层递归函数仍然能获取该锁的代码,在同一个线程在外层方法获取锁的时候,在内层方法会自动获取锁。非公平锁吞吐量比较大。
2023-12-22 22:51:17 454
原创 常见数据结构浅析
往一个容器添加元素时,不直接往Object[]添加,而是先将当前容器Object[]进行copy 复制出一个新得容器,Object[] newElements,然后往新的容器newElements里添加元素,添加完元素后再将原容器的引用指向新得容器setArray(newElements)。这样做的好处是可以对CopyOnWrite容器进行并发读,而不需要加锁,因为当前容器不添加任何元素。把原数组的第index+1后面的数据复制到原数组的index位置复制长度为size - index - 1。
2023-12-22 16:21:29 436
原创 CAS原理浅析
CAS 比较并交换 compareAndSwap。CAS是一种乐观锁机制,也被称为无锁机制。全称:它是并发编程中的一种原子操作,通常用于多线程环境下实现同步和线程安全。CAS操作通过比较内存中的值与期望值是否相等来确定是否执行交换操作。如果相等,则执行交换操作,否则不执行。由于CAS是一种无锁机制,因此它避免了使用传统锁所带来的性能开销和死锁问题,提高了程序的并发性能。
2023-12-22 14:41:23 379
原创 4种常见的限流算法
当有请求到来时,会尝试从桶中移除一个令牌,如果桶中有足够的令牌,则请求可以被处理或数据包可以被发送;由于漏桶算法以固定的速率处理请求,可以有效地平滑和整形流量,避免流量的突发和波动(类似于消息队列的削峰填谷的作用)。桶中的令牌数不能超过桶的容量,如果新生成的令牌超过了桶的容量,那么新的令牌会被丢弃。例如:限流是每秒3个,在第一毫秒发送了3个请求,达到限流,窗口剩余时间的请求都将会被拒绝,体验不好。在一个固定长度的时间窗口内限制请求数量,每来一个请求,请求次数加一,如果请求数量超过最大限制,就拒绝该请求。
2023-12-07 20:20:04 632
原创 mybatis的一级缓存和二级缓存
是在原来的Executor上做了一个装饰,引入一个装饰器叫CachingExecutor,所以进入以及缓存查询前会先去查二级缓存(如果开了二级缓存),开启二级缓存会被多个SqlSession 共享,他是一个全局得缓存。一级缓存:每个SqlSession都会有一个Executor,每个Executor都会持有一个LocalCache得对象,当发起查询的时候会先去LocalCache中去查询,如果命中就直接返回,没命中就去数据库查。跨SqlSession的缓存,以及缓存是无法做到的,所以引入了二级缓存。
2023-12-03 18:49:05 435
原创 网络通信与TCP.IP协议
在TCP协议中,通信双方将通过三次TCP报文实现对以上信息的了解,并在此基础上建立一个TCP连接,而通信双方的三次TCP报文段的交换过程,也就是通常所说的TCP连接建立实现的三次握手(Three-WayHandshake)过程。2次的话客户端收到了服务端的SYN号(同步序列编号(Synchronize Sequence Numbers)),服务端无法确认客户端是否收到自己的同步序列编号。HTTP 协议是基于应用层的协议,并且在传输层使用的 TCP的可靠性通信协议。表示资源的地点(互联网上所处的位置)。
2023-11-29 21:51:29 629
原创 spring循环依赖
●earlySingletonObjects比singletonObjects多了一个early,表示缓存的是早期的bean对象。● singletonFactories中缓存的是ObjectFactory,表示对象工厂,表示用来创建早期bean对象的工厂。● singletonObjects中缓存的是已经经历了完整生命周期的bean对象。Bean的生命周期指的就是:在Spring中,Bean是如何生成的?这里不会对Bean的生命周期进行详细的描述,只描述一下大概的过程。三级缓存是通用的叫法。
2023-11-26 11:15:14 498
原创 Bean的创建过程源码
依赖注入后,Spring会判断该对象是否实现了BeanNameAware接口、BeanClassLoaderAware接口、BeanFactoryAware接口,如果实现了,就表示当前对象必须实现该接口中所定义的setBeanName()、setBeanClassLoader()、setBeanFactory()方法,那Spring就会调用这些方法并传入相应的参数(Aware回调)利用该类的构造方法来实例化得到一个对象(但是如何一个类中有多个构造方法,Spring则会进行选择,这个叫做推断构造方法)
2023-11-26 10:54:21 660
原创 redis与分布式锁浅谈
背景:最近遇到一个生产问题,分布式部署了十几条服务器,有个业务过期的定时任务会每天发邮件提醒用户,然而用户最近反馈,每天收到好几封提醒邮件,于是排查多发的原因。指查询一个一定不存在的数据,由于缓存是不命中,将去查询数据库,但是数据库也无此记录,我们没有将这次查询的null写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。加锁大量并发只让一个去查,其他人等待,查到以后释放锁,其他人获取到锁,先查缓存,就会有数据,不用去db。设置锁的自动过期,即使没有删除,会自动删除。
2023-06-08 22:46:21 1672
原创 zookeeper的安装使用
①修改一、dataDir=/usr/local/zookeeper/apache-zookeeper-3.8.0-bin/zkData。启动:在/usr/local/zookeeper/apache-zookeeper-3.8.0-bin/bin目录下执行。查看:在/usr/local/zookeeper/apache-zookeeper-3.8.0-bin/bin目录下执行。在/usr/local/zookeeper/apache-zookeeper-3.8.0-bin/zkData创建。
2023-05-22 22:57:49 2380
原创 elasticsearch 7.9.3知识归纳整理(二)之 es基本原理及使用kibana操作es的常见命令
es基本原理及使用kibana操作es的常见命令
2023-01-02 23:04:18 6716
原创 设计模式之代理模式
代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的 功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理模式有不同的形式, 主要有三种静态代理、动态代理(也叫JDK代理或接口代 理)和Cglib代理(可以在内存动态的创建对象,而不需要实现接口, 他是属于 动态代理的范畴)
2022-08-21 22:22:12 478
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人