多线程
Alice_8899
这个作者很懒,什么都没留下…
展开
-
限流器及Guava实现分析
目录限流常用限流算法计数限流算法固定窗口计数滑动窗口计数非计数限流法漏桶限流令牌桶限流算法比较Guava包中限流工具的实现分析概览简单使用示例RateLimiter实现分析create函数分析acquire函数分析子类实现分析代码分析实现逻辑特点抽象函数分析storedPermitsToWaitTime函数GUAV...原创 2020-03-13 10:36:59 · 430 阅读 · 0 评论 -
java 轻量级同步volatile关键字简介与可见性有序性与synchronized区别
概念JMM规范解决了线程安全的问题,主要三个方面:原子性、可见性、有序性,借助于synchronized关键字体现,可以有效地保障线程安全(前提是你正确运用)之前说过,这三个特性并不一定需要全部同时达到,在有些场景,部分达成也能够做到线程安全。volatile就是这样一个存在,对可见性和有序性进行保障可见性volatile字面意思,易变的,不稳定的,在Java中含义也是如...转载 2020-03-04 12:35:03 · 267 阅读 · 0 评论 -
用AtomicStampedReference解决ABA问题
在运用CAS做Lock-Free操作中有一个经典的ABA问题:线程1准备用CAS将变量的值由A替换为B,在此之前,线程2将变量的值由A替换为C,又由C替换为A,然后线程1执行CAS时发现变量的值仍然为A,所以CAS成功。但实际上这时的现场已经和最初不同了,尽管CAS成功,但可能存在潜藏的问题,例如下面的例子:现有一个用单向链表实现的堆栈,栈顶为A,这时线程T1已经知道A.next为B,...转载 2020-01-09 17:12:44 · 224 阅读 · 0 评论 -
如何评估线程池中的核心线程池个数的大小
分析一般从几个角度考虑:1.任务的性质:CPU密集型的任务、IO密集型任务、混合型任务。 2.任务的优先级:高、中、低 3.任务执行时间:长、中、短 4.任务的依赖性:是否依赖其它系统资源,如数据库的连接等。根据不同的任务可以交给不同规模的线程池执行。如果是cpu密集型的,尽量减少线程数,如果是IO密集型任务尽量加大线程数,因为io不占用cpu的资源。建议配置2倍CPU个数+1。...原创 2020-01-08 13:59:12 · 612 阅读 · 0 评论 -
Java-五种线程池,四种拒绝策略,三种阻塞队列
Java-五种线程池,四种拒绝策略,三种阻塞队列:三种阻塞队列:BlockingQueue<Runnable> workQueue = null;workQueue = new ArrayBlockingQueue<>(5);//基于数组的先进先出队列,有界workQueue = new LinkedBlockingQueue<&g...原创 2019-12-31 13:39:48 · 163 阅读 · 1 评论 -
不可不说的Java“锁”事
前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8和Netty 3.10.6)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体...转载 2019-11-30 18:00:18 · 123 阅读 · 0 评论 -
ThreadLocal与WeakReference问题
ThreadLocal local = new ThreadLocal();local.set("当前线程名称:"+Thread.currentThread().getName());//将ThreadLocal作为key放入threadLocals.Entry中Thread t = Thread.currentThread();//注意断点看此时的threadLocals.Entry数组刚...转载 2019-10-28 14:34:15 · 260 阅读 · 0 评论