多线程
Alice_8899
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
限流器及Guava实现分析
目录 限流 常用限流算法 计数限流算法 固定窗口计数 滑动窗口计数 非计数限流法 漏桶限流 令牌桶限流 算法比较 Guava包中限流工具的实现分析 概览 简单使用示例 RateLimiter实现分析 create函数分析 acquire函数分析 子类实现分析 代码分析 实现逻辑特点 抽象函数分析 storedPermitsToWaitTime函数 GUAV...原创 2020-03-13 10:36:59 · 582 阅读 · 0 评论 -
java 轻量级同步volatile关键字简介与可见性有序性与synchronized区别
概念 JMM规范解决了线程安全的问题,主要三个方面:原子性、可见性、有序性,借助于synchronized关键字体现,可以有效地保障线程安全(前提是你正确运用) 之前说过,这三个特性并不一定需要全部同时达到,在有些场景,部分达成也能够做到线程安全。 volatile就是这样一个存在,对可见性和有序性进行保障 可见性 volatile字面意思,易变的,不稳定的,在Java中含义也是如...转载 2020-03-04 12:35:03 · 344 阅读 · 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 · 307 阅读 · 0 评论 -
如何评估线程池中的核心线程池个数的大小
分析一般从几个角度考虑: 1.任务的性质:CPU密集型的任务、IO密集型任务、混合型任务。 2.任务的优先级:高、中、低 3.任务执行时间:长、中、短 4.任务的依赖性:是否依赖其它系统资源,如数据库的连接等。 根据不同的任务可以交给不同规模的线程池执行。 如果是cpu密集型的,尽量减少线程数,如果是IO密集型任务尽量加大线程数,因为io不占用cpu的资源。建议配置2倍CPU个数+1。 ...原创 2020-01-08 13:59:12 · 727 阅读 · 0 评论 -
Java-五种线程池,四种拒绝策略,三种阻塞队列
Java-五种线程池,四种拒绝策略,三种阻塞队列: 三种阻塞队列: BlockingQueue<Runnable> workQueue = null; workQueue = new ArrayBlockingQueue<>(5);//基于数组的先进先出队列,有界 workQueue = new LinkedBlockingQueue<&g...原创 2019-12-31 13:39:48 · 239 阅读 · 1 评论 -
不可不说的Java“锁”事
前言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8和Netty 3.10.6)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。 Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体...转载 2019-11-30 18:00:18 · 182 阅读 · 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 · 367 阅读 · 0 评论
分享