![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发
Aran_
风筝有风,海豚有海
展开
-
[系统设计]电商 & 秒杀系统-设计思路和实现方法
本文为转载:查看原文mark 一篇关于秒杀系统的设计思路,以后仔细学习一、秒杀业务分析正常电子商务流程(1)查询商品(2)创建订单(3)扣减库存(4)更新订单(5)付款(6)卖家发货秒杀业务的特性(1)低廉价格(2)大幅推广(3)瞬时售空(4)一般是定时上架(5)时间短、瞬时并发量高;二、秒杀技术挑战假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有:对现有网站业务造成冲击秒杀活动只是网站营转载 2020-08-28 22:22:13 · 903 阅读 · 0 评论 -
[java并发] java高并发系列 - 第29天:高并发中常见的限流方式
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文内容:介绍常见的限流算法通过控制最大并发数来进行限流通过漏桶算法来进行限流通过令牌算法来进行限流限流工具类RateLimiter常见的限流的场景秒杀活动,数量有限,访问量巨大,为了防止系统宕机,需要做限流处理国庆期间,一般的旅游景点人口见多,采用排队方式做限流处理医院看病通过发放排队号来做限流处理常见的限流算法通过控制最大并发数来进行限流使用漏桶算法来进行限流使用转载 2020-08-04 17:59:46 · 232 阅读 · 0 评论 -
[java并发概念篇]乐观锁与悲观锁
原文地址何为悲观锁与乐观锁乐观锁对应于生活乐观的人总是想着事情往好的方向发展,悲观锁对应生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能以场景而定说一种人好于另外一种人。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其他线程)。传统的关系型数据库里面就用到了很多这种锁机制,比如 行锁,表锁,读锁,写锁等,都是在做操作之前先上转载 2020-07-27 17:27:01 · 136 阅读 · 0 评论 -
[java并发] java并发系列 - 第 28 天:实战篇,微服务日志的痛,一并帮你解决
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文内容:日志有什么用?日志存在的痛点?构建日志系统日志有什么作用?系统出现故障的时候,可以通过日志信息快速定位问题,修复bug,恢复业务提取有效数据,做数据分析使用日志存在的痛点?先介绍下多数公司采用的方式:目前比较流行的是采用springCloud (或者dubbo)做微服务,按照业务拆分为多个独立的服务,服务采用集群的方式部署在不同的机器上,当一个请求过来的时候,可能会调用很转载 2020-06-24 16:41:18 · 197 阅读 · 0 评论 -
[java并发] java高并发系列 - 第27天:实战篇,接口性能提升几倍原来这么简单
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧案例讲解电商app都有用过吧,商品详情页,需要给他们提供一个接口获取商品相关信息:商品基本信息(名称、价格、库存、会员价格等)商品图片列表商品描述信息数据库中我们用了3张表存储上面的信息:商品基本信息表:t_goods(字段:id【商品id】,名称、价格、库存、会员价格等)商品图片信息表:t_goods_imgs(字段:id、goods_ids【商品id】、图片路径),一个商品会有多张图片转载 2020-06-18 11:00:15 · 392 阅读 · 0 评论 -
[java并发] java高并发系列 - 第26天:学会使用JUC中常见的结合,常看看
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文内容:了解JUC常见集合,学会使用ConcurrentHashMapConcurrentSkipListMapConcurrentSkipListSetCopyOnWriteArraySet介绍Queue接口ConcurrentLinkedQueueCopyOnWriteArrayList介绍Deque接口ConcurrentLinkedDequeue...转载 2020-06-17 17:22:38 · 227 阅读 · 0 评论 -
[java并发] java高并发系列 - 第25天:掌握JUC中的阻塞队列
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要内容:掌握Queue、BlockingQueue接口中常用的方法介绍6种阻塞队列,及相关场景示例重点掌握4种常用的阻塞队列Queue接口队列是一种先进先出(FIFO)的数据结构,java中用 Queue 接口来表示队列。Queue 接口定义了6个方法:public interface Queue<E> extends Collection<E>{ bool转载 2020-06-16 17:26:36 · 254 阅读 · 0 评论 -
[java并发] java高并发系列 - 第24天:ThreadLocal、InheritableThreadLocal(通俗易懂)
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文内容需要解决的问题介绍ThreadLocal介绍InheritableThreadLocal需要解决的问题:我们还是以解决问题的方式引出 ThreadLocal、InheritableThreadLocal目前java开发web系统一般为3层,controller、service、dao,请求到达controller、controller调用service、service调用dao,转载 2020-06-14 15:51:41 · 202 阅读 · 0 评论 -
[java并发] java高并发系列 - 第23天,JUC原子类,一篇就够了
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要内容:JUC 原子类介绍介绍基本类型原子类介绍数组类型原子类介绍引用类型原子类介绍对象属性修改相关原子类预备知识JUC中的原子类都是依靠volatile、CAS 、Unsafe 类配合实现的,需要了解的请移步之前的文章:volatile与Java内存模型Java中的CASJUC底层工具类UnsafeJUC中原子类介绍什么是原子操作?atomic 翻译成中文你是原子的转载 2020-06-13 11:04:15 · 257 阅读 · 0 评论 -
[java并发] java高并发系列 - 第22天:JUC底层工具类Unsafe,高手必须要了解
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要内容:Unsafe基本介绍获取Unsafe实例Unsafe中的CAS操作Unsafe中原子操作相关方法介绍Unsafe中线程调度相关方法介绍park和unpark示例Unsafe锁示例Unsafe中对volatile的支持基本介绍...转载 2020-06-10 12:00:39 · 192 阅读 · 0 评论 -
[java并发]java高并发系列 - 第21天:java中的CAS,你需要知道的东西
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要内容从网站计数器实现中一步步引出CAS操作介绍java中的CAS及CAS可能存的问题悲观锁和乐观锁的一些介绍及数据库乐观锁的一个常见示例使用java中的原子操作实现网站计数器功能我们需要解决的问题需求: 我们开发了一个网站,需要对访问量进行统计,用户每次发一次请求,访问量+1,如何实现呢?...转载 2020-06-09 10:48:58 · 170 阅读 · 0 评论 -
[java并发]java高并发系列- 第20天 JUC中的Executor框架详解2
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文的主要内容ExecutorCompletionService出现的背景介绍CompletionService接口及常用的方法介绍ExecutorCompletionService类及其原理示例一:执行一批任务,然后消费执行结果示例二【2种方式】:异步执行一批任务,有一个完成立即返回,其他取消需要解决的问题:举例说明:买新房了,然后在网上单买电冰箱、洗衣机,电器商家不同,所以送货耗时不转载 2020-06-08 11:31:49 · 152 阅读 · 0 评论 -
[java并发] java高并发系列 - 第19天:JUC中的Executor框架详解1
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要内容介绍Executor框架相关内容介绍Executor介绍ExecutorService介绍线程池ThreadPoolExecutor介绍定时器ScheduledExecutorService及案例介绍Executors类的使用介绍Future接口介绍Callable接口介绍FutureTask接口获取异步任务的执行结果的几种方法...转载 2020-06-05 17:15:24 · 327 阅读 · 0 评论 -
[java并发]java高并发系列 - 第18天:JAVA线程池,这一篇就够了
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要内容什么是线程池线程池实现原理线程池中常见的各种队列自定义线程创建的工厂常见的饱和策略自定义饱和策略线程池中两种关闭方法有何不同扩展线程池合理地配置线程池10.线程池中线程数量的配置什么是线程池?大家用jdbc操作过数据库应该知道,操作数据库需要和数据库建立连接,拿到连接之后才能操作数据库,用完之后销毁。数据库连接的创建和销毁其实是比较耗时的,真正和业务相关的操作耗时是比转载 2020-06-04 09:16:39 · 297 阅读 · 0 评论 -
[java并发]java高并发系列-第17天:JUC中的循环栅栏CyclicBarrier的6种使用场景
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要内容:介绍CyclicBarrier6个示例介绍CyclicBarrier的使用对比CyclicBarrier和CountDownLatchCyclicBarrier简介CyclicBarrier通常称为循环屏障。它和CountDownLatch很相似,都可以使线程先等待然后再执行。不过CountDownLatch是使一批线程等待另一批线程执行完毕后再执行;而CyclicBarrier转载 2020-06-02 18:27:44 · 327 阅读 · 0 评论 -
[java并发]java高并发系列 - 第16天:JUC中等待多线程完成的工具类CountDownLatch,必备技能
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本篇内容:介绍CountDownLatch及使用场景提供几个示例介绍CountDownLatch的使用手写一个并行处理任务的工具类假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要统计解析总耗时。分析一下:解析每个sheet耗时可能不一样,总耗时就是最长耗时的那个操作。我们转载 2020-06-01 22:22:37 · 222 阅读 · 0 评论 -
[java并发]java高并发系列 - 第15天:JUC中的Semaphore(信号量)
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧Semaphore(信号量) 为多线程协作提供了更为强大的的控制方法,前面的文章中,我们学习了synchronized和重入锁ReentrantLock,这2种锁一次只能允许一个线程访问资源,而信号量可以控制有多个线程可以访问特定的资源。Semaphore常用场景:限流举个????:比如有个停车场,有5个空位,门口有门卫,手中有5把钥匙分别对应5个车位上的锁。来一辆车,门卫会给司机一把钥匙,然后进去找转载 2020-05-29 15:21:48 · 256 阅读 · 0 评论 -
[java并发]java高并发系列 - 第14天:JUC中的LockSupport工具类,必备技能
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要内容:讲解3种让线程等待和唤醒的方法,每种方法配合具体的示例介绍LockSupport主要用法对比三种方式,了解它们的区别LockSupport位于java.util.cuncurrent(简称JUC) 包中,算是juc中的一个基础类,juc中很多地方都会使用LockSupport,非常重要,一定要掌握关于线程等待/唤醒的方法,前面的文章已经讲过了方式1:使用Object中的wai转载 2020-05-28 19:23:53 · 234 阅读 · 0 评论 -
[java并发]java高并发系列- 第13天:JUC中的Condition对象
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文内容:synchronized中实现线程等待和唤醒Condition简介及常用方法介绍和相关实例使用Condition实现生产者和消费者使用Condition实现同步阻塞队列Object 对象中的wait,notify方法,用于线程等待和唤醒等待中的线程,大家应该比较熟悉,想再次了解的朋友可以去看第6天的文章synchronized中等待和唤醒线程示例...转载 2020-05-26 00:34:34 · 224 阅读 · 0 评论 -
[java并发]java高并发系列 - 第12天JUC:ReentrantLock重入锁
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本篇文章开始讲juc中常用的一些类,估计会有是来篇。synchronized的局限性synchronized是java内置的关键字,它提供了一种独占的加锁方式。synchronized的获取和释放锁由jvm实现,用户不需要显式的释放锁,非常方便,然而synchronized也有一定的局限性,例如:当线程尝试获取锁的时候,如果获取不到锁会一直阻塞,这个阻塞的过程,用户无法控制如果获取锁的线程进入休眠转载 2020-05-23 10:32:15 · 309 阅读 · 0 评论 -
[java并发]java高并发系列 - 第11天:线程中断的几种方式
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要讨论一下中断线程的几种方式。通过一个变量控制线程中断示例如下:package aboutThread;import java.util.concurrent.TimeUnit;public class InterruptedBy_Variable { public volatile static boolean exit = true; public static c转载 2020-05-22 09:52:56 · 244 阅读 · 0 评论 -
[java并发]java高并发系列- 第10天:线程安全和synchronized关键字
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧什么是线程安全?当多个线程去访问同一个类(对象或方法)的时候,该类就能表现出正常的行为(与自己预想的结果一致),那我们就可以说这个类是线程安全的。看一段代码:...转载 2020-05-21 19:43:39 · 161 阅读 · 0 评论 -
[java并发]java高并发系列 - 第9天:用户线程和守护线程
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧守护线程是一种特殊的线程,在后台默默地完成一些系统性的服务,比如 垃圾回收线程、JIT线程都是 守护线程。与之相对应的用户线程,用户线程可以理解为是系统的工作线程,它会完成这个程序需要完成的业务操作。如果用户线程全部结束了,意味着程序需要完成的业务操作已经结束了,系统可以退出了。所以当系统只剩下守护进程的时候,java虚拟机会自动退出。java线程分为用户线程和守护线程,线程的daemon属性为true表示转载 2020-05-20 11:02:12 · 228 阅读 · 0 评论 -
[java并发]java高并发系列-第8天:线程组
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧线程组我们可以把线程归属到某个线程组中,线程组可以包含多线程 及 线程组,线程和线程组组成了父子关系,是个树形结构,如下图:使用线程组可以方便管理线程,线程组提供了一些方便我们管理线程。创建线程关联线程组创建线程的时候,可以给线程指定一个线程组,代码如下:package aboutThread;import java.util.concurrent.TimeUnit;public clas转载 2020-05-19 20:45:25 · 187 阅读 · 0 评论 -
[java并发]java高并发系列 - 第7天:volatile与Java内存模型
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧package aboutThread;public class About_volatile { public static boolean flag = true; public static class T1 extends Thread{ public T1(String name){ super(name); }转载 2020-05-18 00:07:43 · 192 阅读 · 0 评论 -
[java并发]java高并发第5天 - 深入理解进程和线程
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧进程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程具有的特征动态性:进程是程序的一次执行过程,是临时的、有生命周期的,是动态产生,动态消亡的并发性:任何进程都可以同其他进程一起并发执行独立性:进程是系统进行资源分配和调度的一个独立单位结构性:进程由程序,数据转载 2020-05-15 15:04:05 · 154 阅读 · 0 评论 -
[java并发]java高并发系列 - 第6天:线程的基本操作
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧新建线程新建线程很简单。只需要使用new关键字创建一个线程对象,然后调用它的start()启动线程即可。 Thread thread1 = new Thread(); t1.start();那么线程start()之后,会干什么呢?线程有个run()方法,start()会创建一个新的线程并让这个线程执行run()方法。这里需要注意,下面代码也能通过编译,也能正常执行。但是,却不能新建一个线程,而是在转载 2020-05-15 12:05:43 · 183 阅读 · 0 评论 -
[java并发]java高并发系列 -第4天:JMM相关的一些概念
JMM(java内存模型),由于并发程序要比串行程序复杂很多,其中一个重要的原因是并发程序中数据访问 一致性 和 安全性 将会受到严重挑战。如何保证一个线程可以看到正确的数据呢? 这个问题看起来很白痴。对于串行程序来说,根本就是小菜一碟,如果你读取一个变量,这个变量的值是1,那么你读取到的一定是1,就是这么简单的问题在并行程序中居然变得复杂起来。事实上,如果不加控制地任由线程胡乱并行,即使原本是1的数值,你也可能读到2。因此我们需要深入了解并行机制的前提下,在定义一种规则,保证多个线程间可以有效地、正确地协转载 2020-05-14 19:39:57 · 184 阅读 · 0 评论 -
[java并发]java高并发系列-第3天:有关并行的两个重要定律
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧java高并发系列第3篇文章,一个月,咱们一起啃下java高并发,欢迎留言打卡,一起坚持一个月,拿下java高并发。有关为什么要使用并行程序的问题前面已经进行了简单的探讨。总的来说,最重要的应该是处于两个目的。第一,为了获得更好的性能;第二,由于业务模型的需要,确实需要多个执行实体。在这里,我将更加关注第一种情况,也就是有关性能的问题。将串行程序改造为并发程序,一般来说可以提高程序的整体性能,但是究转载 2020-05-13 10:49:34 · 162 阅读 · 0 评论 -
[java并发]java高并发系列-第2天:并发级别
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧接下来一个月,咱们一起啃下java高并发,欢迎留言打卡,一起坚持一个月,拿下java高并发。在阅读之前,你可以和我一样,了解下文章中的一些概念:什么是重入锁和不可重入锁由于临界区的存在,多线程之间的并发必须受到控制。根据控制并发的策略,我们可以把并发的级别分为阻塞、无饥饿、无障碍、无锁、无等待几种。阻塞一个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继续执行。当我们使用synch转载 2020-05-13 09:53:32 · 194 阅读 · 0 评论 -
[java并发概念篇]什么是重入锁和不可重入锁
本篇为转载文章:查看原文锁分为可重入锁和不可重入锁。可重入和不可重入的概念是这样的:当一个线程获得了当前实例的锁,并进入方法A,这个线程在没有释放这把锁的时候,能否再次进入方法A呢?可重入锁:可以再次进入方法A,就是说在释放锁前此线程可以再次进入方法A(方法A递归)。不可重入锁(自旋锁):不可以再次进入方法A,也就是说获得锁进入方法A是此线程在释放锁钱唯一的一次进入方法A。先举例来说明锁的可重入性:public class UnReentrant{ Lock lock = new转载 2020-05-13 09:51:42 · 374 阅读 · 0 评论 -
[java并发]java高并发系列-第1天:必须知道的几个概念
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧接下来一个月,咱们一起啃下java高并发,欢迎留言打卡,一起坚持一个月,拿下java高并发。同步(Synchronous)和异步(Asynchronous)同步和异步通常来形容一次方法调用,同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。 而异步方法通常会在另外一个线程中“真实”地执行。整个转载 2020-05-08 17:44:57 · 314 阅读 · 0 评论