随笔分类 -  java高并发系列

摘要:这是java高并发系列第32篇文章。 java环境:jdk1.8。 本文主要内容 1. 4种方式实现计数器功能,对比其性能 2. 介绍LongAdder 3. 介绍LongAccumulator 需求:一个jvm中实现一个计数器功能,需保证多线程情况下数据正确性。 我们来模拟50个线程,每个线程对计 阅读全文
posted @ 2019-08-28 15:43 路人甲Java 阅读(3595) 评论(0) 推荐(1)
摘要:在一个线程中需要获取其他线程的执行结果,能想到几种方式?结合这个需求,我们使用6种方式,来对之前学过的知识点做一个回顾,加深记忆。 阅读全文
posted @ 2019-08-26 15:25 路人甲Java 阅读(1687) 评论(0) 推荐(0)
摘要:这是java高并发系列第29篇。 环境:jdk1.8。 本文内容 1. 介绍常见的限流算法 2. 通过控制最大并发数来进行限流 3. 通过漏桶算法来进行限流 4. 通过令牌桶算法来进行限流 5. 限流工具类RateLimiter 常见的限流的场景 1. 秒杀活动,数量有限,访问量巨大,为了防止系统宕 阅读全文
posted @ 2019-08-20 16:23 路人甲Java 阅读(2738) 评论(2) 推荐(4)
摘要:这是java高并发系列第28篇文章。 环境:jdk1.8。 本文内容 1. 日志有什么用? 2. 日志存在的痛点? 3. 构建日志系统 日志有什么用? 1. 系统出现故障的时候,可以通过日志信息快速定位问题,修复bug,恢复业务 2. 提取有用数据,做数据分析使用 本文主要讨论通过日志来快速定位并解 阅读全文
posted @ 2019-08-19 16:07 路人甲Java 阅读(1655) 评论(0) 推荐(0)
摘要:这是java高并发系列第26篇文章。 环境:jdk1.8。 本文内容 1. 了解JUC常见集合,学会使用 3. ConcurrentHashMap 4. ConcurrentSkipListMap 5. ConcurrentSkipListSet 6. CopyOnWriteArraySet 7. 阅读全文
posted @ 2019-08-16 15:10 路人甲Java 阅读(1553) 评论(0) 推荐(0)
摘要:这是java高并发系列第27篇文章。 开发环境:jdk1.8。 案例讲解 电商app都有用过吧,商品详情页,需要给他们提供一个接口获取商品相关信息: 1. 商品基本信息(名称、价格、库存、会员价格等) 2. 商品图片列表 3. 商品描述信息(描述信息一般是由富文本编辑的大文本信息) 数据库中我们用了 阅读全文
posted @ 2019-08-16 15:09 路人甲Java 阅读(1276) 评论(2) 推荐(0)
摘要:这是java高并发系列第25篇文章。 环境:jdk1.8。 本文内容 1. 掌握Queue、BlockingQueue接口中常用的方法 2. 介绍6中阻塞队列,及相关场景示例 3. 重点掌握4种常用的阻塞队列 Queue接口 队列是一种先进先出(FIFO)的数据结构,java中用 接口来表示队列。 阅读全文
posted @ 2019-08-15 16:26 路人甲Java 阅读(701) 评论(0) 推荐(0)
摘要:java高并发系列第24篇文章。 环境:jdk1.8。 本文内容 1. 需要解决的问题 2. 介绍ThreadLocal 3. 介绍InheritableThreadLocal 需要解决的问题 我们还是以解决问题的方式来引出 、`InheritableThreadLocal`,这样印象会深刻一些。 阅读全文
posted @ 2019-08-13 14:49 路人甲Java 阅读(1138) 评论(1) 推荐(6)
摘要:这是java高并发系列第23篇文章,环境:jdk1.8。 本文主要内容 1. JUC中的原子类介绍 2. 介绍基本类型原子类 3. 介绍数组类型原子类 4. 介绍引用类型原子类 5. 介绍对象属性修改相关原子类 预备知识 JUC中的原子类都是都是依靠 volatile 、 CAS 、 Unsafe 阅读全文
posted @ 2019-08-07 15:13 路人甲Java 阅读(1171) 评论(0) 推荐(0)
摘要:这是java高并发系列第22篇文章,文章基于jdk1.8环境。 本文主要内容 1. 基本介绍 2. 通过反射获取Unsafe实例 3. Unsafe中的CAS操作 4. Unsafe中原子操作相关方法介绍 5. Unsafe中线程调度相关方法 6. park和unpark示例 7. Unsafe锁示 阅读全文
posted @ 2019-08-06 14:51 路人甲Java 阅读(1221) 评论(0) 推荐(2)
摘要:这是java高并发系列第21篇文章。 本文主要内容 1. 从网站计数器实现中一步步引出CAS操作 2. 介绍java中的CAS及CAS可能存在的问题 3. 悲观锁和乐观锁的一些介绍及数据库乐观锁的一个常见示例 4. 使用java中的原子操作实现网站计数器功能 我们需要解决的问题 需求:我们开发了一个 阅读全文
posted @ 2019-08-05 15:00 路人甲Java 阅读(709) 评论(0) 推荐(1)
摘要:这是java高并发系列第20篇文章。 本文内容 1. ExecutorCompletionService出现的背景 2. 介绍CompletionService接口及常用的方法 3. 介绍ExecutorCompletionService类及其原理 4. 示例:执行一批任务,然后消费执行结果 5. 阅读全文
posted @ 2019-08-02 09:08 路人甲Java 阅读(584) 评论(0) 推荐(0)
摘要:这是java高并发系列第19篇文章。 本文主要内容 1. 介绍Executor框架相关内容 2. 介绍Executor 3. 介绍ExecutorService 4. 介绍线程池ThreadPoolExecutor及案例 5. 介绍定时器ScheduledExecutorService及案例 6. 阅读全文
posted @ 2019-08-01 09:17 路人甲Java 阅读(884) 评论(1) 推荐(0)
摘要:本文主要内容 1. 什么是线程池 2. 线程池实现原理 3. 线程池中常见的各种队列 4. 自定义线程创建的工厂 5. 常见的饱和策略 6. 自定义饱和策略 7. 线程池中两种关闭方法有何不同 8. 扩展线程池 9. 合理地配置线程池 10. 线程池中线程数量的配置 阅读全文
posted @ 2019-07-29 08:59 路人甲Java 阅读(2795) 评论(5) 推荐(6)
摘要:1. 第1天:必须知道的几个概念 2. 第2天:并发级别 3. 第3天:有关并行的两个重要定律 4. 第4天:JMM相关的一些概念 5. 第5天:深入理解进程和线程 6. 第6天:线程的基本操作 7. 第7天:volatile与Java内存模型 8. 第8天:线程组 9. 第9天:用户线程和守护线程 阅读全文
posted @ 2019-07-26 09:32 路人甲Java 阅读(3571) 评论(3) 推荐(2)
摘要:这是java高并发系列第17篇。 本文主要内容: 1. 介绍CyclicBarrier 2. 6个示例介绍CyclicBarrier的使用 3. 对比CyclicBarrier和CountDownLatch CyclicBarrier简介 CyclicBarrier通常称为循环屏障。它和CountD 阅读全文
posted @ 2019-07-25 09:20 路人甲Java 阅读(833) 评论(0) 推荐(2)
摘要:这是java高并发系列第16篇文章。 本篇内容 1. 介绍CountDownLatch及使用场景 2. 提供几个示例介绍CountDownLatch的使用 3. 手写一个并行处理任务的工具类 假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一 阅读全文
posted @ 2019-07-22 15:08 路人甲Java 阅读(891) 评论(0) 推荐(1)
摘要:这是java高并发系列第15篇文章 Semaphore(信号量)为多线程协作提供了更为强大的控制方法,前面的文章中我们学了synchronized和重入锁ReentrantLock,这2种锁一次都只能允许一个线程访问一个资源,而信号量可以控制有多少个线程可以 同时访问 特定的资源。 Semaphor 阅读全文
posted @ 2019-07-22 09:02 路人甲Java 阅读(1409) 评论(0) 推荐(1)
摘要:这是java高并发系列第14篇文章。 本文主要内容: 1. 讲解3种让线程等待和唤醒的方法,每种方法配合具体的示例 2. 介绍LockSupport主要用法 3. 对比3种方式,了解他们之间的区别 LockSupport 位于 java.util.concurrent ( 简称juc )包中,算是j 阅读全文
posted @ 2019-07-20 17:17 路人甲Java 阅读(954) 评论(1) 推荐(2)
摘要:本文目标: 1. synchronized中实现线程等待和唤醒 2. Condition简介及常用方法介绍及相关示例 3. 使用Condition实现生产者消费者 4. 使用Condition实现同步阻塞队列 Object对象中的wait(),notify()方法,用于线程等待和唤醒等待中的线程,大 阅读全文
posted @ 2019-07-20 17:14 路人甲Java 阅读(886) 评论(0) 推荐(1)