并发编程
文章平均质量分 85
@追风少年
"code".equals("life") ? "false" : "success"
展开
-
本地缓存Guava Cache实践
本地 Cache 的老大哥Guava Cache 通过简单好用的 Client 可以快速构造出符合需求的 Cache 对象,不需要过多复杂的配置,大多数情况就像构造一个 POJO 一样的简单。一、Guava Cache实现这里我们是通过CacheLoader的方式来对Guava Cache进行实现,但是它还可以通过Callable的方式实现。/** * @author zheyue * @date 2021/11/3 **/@Slf4j@Servicepublic class Cach.原创 2021-11-16 11:47:38 · 434 阅读 · 0 评论 -
线程池踩坑记录
线程池原理简单参考:对Java中线程池的理解线程池的创建使用和注意事项1. 手动创建// 线程池创建private ExecutorService threadPoolExecutor = new ThreadPoolExecutor( 10, 20, 1, TimeUnit.MINUTES, new LinkedBlockingDeque<>(10000), new ThreadFactoryBuilder().setNameForma原创 2021-11-12 11:15:06 · 491 阅读 · 0 评论 -
深入理解CAS与AQS
CAS与AQS一、CAS1、什么是CAS2、CAS进行原子操作的三大问题3、循环CAS二、AQS1、核心思想2、具体实现3、AQS 对资源的两种共享方式4、AQS 的应用一、CAS1、什么是CAS首先,CAS是一种算法,不是锁CAS,其实是个简称,全称是 Compare And Swap,对比之后交换数据CAS的实现原理首先呢,我们通过它的全称就可以看出来,CAS先是对比数据,然后再执行具体的原子操作。几个参数介绍:this:Unsafe 对象本身,需要通过这个类来获取 valu原创 2021-03-03 21:04:20 · 635 阅读 · 2 评论 -
Java线程池
Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序 都可以使用线程池。一、使用线程池的好处在开发过程中,合理地使用线程池能够带来3个好处。降低资源消耗通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源, 还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。二、线程池的实现原理线程池处理.原创 2021-03-02 17:54:14 · 280 阅读 · 0 评论 -
ConcurrentHashMap的实现原理
一、为什么要是用ConcurrentHashMap在并发编程中使用HashMap可能导致程序死循环(这是在JDK1.7中,在JDK1.8中导致的线程不安全主要是put方法可能会导致值被覆盖)。而使用线程安全的HashTable效率又非常低下(全表数据被synchronized修饰),基于以上两个原因,便有了ConcurrentHashMap的登场机会。1、HashMap线程不安全HashMap原理请参考:HashMap原理JDK1.7线程不安全主要体现在发生扩容的时候,重新哈希(rehas原创 2021-03-02 00:53:34 · 432 阅读 · 7 评论 -
深入理解 “死锁“
死锁理解一、什么是死锁二、长生死锁的条件三、如何避免死锁1、第一种方式2、第二种方式(拓展)一、什么是死锁死锁为两个或两个以上的线程在执行过程中,由于竞争资源而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。当线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。举个例子(个人理解):就是比如说两个线程:线程A、线程B,各自持有自己的资源(A持有资源a,B持有资源b),当A需要资源b,B需要资源a。但是此时A抓着a资源不放,B抓这b资原创 2021-02-28 21:58:36 · 274 阅读 · 1 评论