
并发编程
并发编程
阿呆布衣酷
纯干货学习笔记:无盈利目的,只想帮自己成长
展开
-
徐无忌并发编程笔记:案例实战:并发编程之12306抢票业务重点分析
徐无忌并发编程笔记:案例实战:并发编程之12306抢票业务重点分析完成:第一遍1.抢票业务的瓶颈在哪里?流量非常大时,数据库是扛不住的,是整个系统的瓶颈真实场景会从各个方面减少流量,保证最终能够访问数据库的只是很少的一部分流量一般会从产品层面、应用各层次、限流、消息队列削锋、优先更新缓存再同步入库等等方式来保证只能让一小部分请求进入到后台。2.由于限流目的,可以对不能通过的请求做哪些措施?一般我们会限制一秒钟的能够通过的请求数以此来保护系统,对于不能通过的请求可以:措施一:拒绝服务(提示友原创 2020-07-22 10:04:13 · 342 阅读 · 0 评论 -
徐无忌并发编程笔记:案例实战:线程安全的单例模式几种实现方式?
徐无忌并发编程笔记:案例实战:线程安全的单例模式几种实现方式?完成:第一遍1.线程安全的单例模式有几种实现方式?方式一:懒汉式加载懒汉式单例1.线程安全2.采用同步方法当使用时才创建instance优点:起到lazy loading的效果,线程安全,synchronized同步方法同一时间只会有一个线程进入缺点:加锁,效率低,并发情况下,每个线程在获取实例时都需要进行同步package code01;public class LazySingleton { private st原创 2020-07-22 00:41:27 · 155 阅读 · 0 评论 -
徐无忌并发编程笔记:案例实战:使用Fork-Join框架解决Word-Count问题
徐无忌并发编程笔记:案例实战:使用Fork-Join框架解决Word-Count问题完成:第一遍1.什么叫分治的任务模型?步骤一:一个复杂的问题分解成多个相似的子问题步骤二:然后再把子问题分解成更小的子问题步骤三:直到子问题简单到可以直接求解步骤四:最后将所有子任务进行合并得到最终的结果2.分治模型在哪些领域应用?领域1、算法领域归并排序快速排序二分法查找领域2、大数据领域MapReduce3.Fork-Join 使用的原理是什么?Fork 对应的是分治模型里的分解Join原创 2020-07-21 23:36:25 · 415 阅读 · 0 评论 -
徐无忌并发编程笔记:案例实战:concurrentHashMap线程安全机制及源码分析
徐无忌并发编程笔记:案例实战:concurrentHashMap线程安全机制及源码分析完成:第一遍1.如何解决HashMap线程不安全的问题?解决办法:通过同步容器工具类对不安全的集合类进行包装 Map map = (Map) Collections.synchronizedMap(new HashMap<>()); synchronizedMap()源码的put()方法: public V put(K key, V value) { synchro原创 2020-07-21 21:20:24 · 248 阅读 · 0 评论 -
徐无忌并发编程笔记:案例实战:高并发请求下使用ThreadLocal获取用户信息
徐无忌并发编程笔记:案例实战:高并发请求下使用ThreadLocal获取用户信息完成:第一遍1.如何通过Session会话机制校验保持登录效果?HTTP协议是非连接性的,完成操作关闭浏览器后,链接就断开了。所以必须要有一种机制让保证会话的连续性,也就是Session机制当开始一个会话时创建一个Session,并为其赋予一个独一无二的号码sessionID或者其他有用的信息如用户名等等,下一次访问的时候,传递sessionID给后端,就可以识别出属于同一个会话连接通常会将sessionID放在coo原创 2020-07-21 19:33:46 · 314 阅读 · 0 评论 -
徐无忌并发编程笔记:案例实战:ThreadLocal底层原理是什么?可能会造成内存泄漏吗?
徐无忌并发编程笔记:案例实战:ThreadLocal底层原理是什么?可能会造成内存泄漏吗?完成:第一遍1.什么是ThreadLocal?ThreadLocal与线程同步机制不同,线程同步机制是多个线程共享同一个变量,对这个共享变量的修改,通过无锁或者有锁的机制保证线程的安全而ThreadLocal是为每一个线程,创建一个只属于它自己的变量副本,线程可以改变自己所拥有的变量副本,而不会影响其他线程所对应的副本简而言之,往ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的一原创 2020-07-21 19:04:31 · 210 阅读 · 0 评论 -
徐无忌并发编程笔记:案例实战:volatile域在不同情况下的场景应用?
徐无忌并发编程笔记:案例实战:volatile域在不同情况下的场景应用?完成:第一遍1.volatile关键字有哪些特点?volatile保证了可见性、有序性,不保证原子性开销一般情况下小于锁的获取,使用无锁的机制完成线程安全任务2.为什么说volatile关键字保证了可见性?某个共享变量如果被一个线程给修改了,其他线程能够立即知道这个修改操作线程的处理器会一直在总线上嗅探,一旦发现其他处理器对主存中的共享变量进行了修改会将自己的工作空间中的缓存置为失效,强制去内存中重新读取这个共享变量3原创 2020-07-21 17:41:26 · 259 阅读 · 0 评论 -
徐无忌并发编程笔记:如果线上机器突然宕机,线程池内阻塞队列中的请求怎么办?
徐无忌并发编程笔记:如果线上机器突然宕机,线程池内阻塞队列中的请求怎么办?完成:第一遍1.线上机器宕机,导致内存中积压在阻塞队列的任务丢失怎么办?方案一:数据备份:在提交任务到线程池之前,先任务进行备份如果发生宕机,内存中工作队列的任务会消失机器重启后,从备份的数据中找回任务,重新提交重新执行方案二:采用多阶段的方式,解决可用性与一致性的问题2.采用多阶段的方式将任务划分为哪几个状态?未提交已提交已执行提交任务之后,将任务的状态从未提交改变已提交机器重启后,找到这些已提交未执行的任原创 2020-07-21 16:55:16 · 1049 阅读 · 0 评论 -
徐无忌并发编程笔记:如果在线程池中使用无界阻塞队列会发生什么问题?
徐无忌并发编程笔记:如果在线程池中使用无界阻塞队列会发生什么问题?完成:第一遍1.什么是无界阻塞队列?LinkedBlockingQueue默认的最大任务数量是Integer.MAX_VALUE如果线程池内的线程在获取到一个任务后,需要执行时间较长,会导致workQueue里积压的任务越来越多2.什么是OOM?大量任务的积压导致机器的内存使用不停的飙升,最后导致OOMOOM,“Out Of Memory”,俗称“内存用完了”。当JVM因为没有足够的内存来为新的对象分配空间,并且垃圾回收器也已原创 2020-07-21 16:30:20 · 1408 阅读 · 0 评论 -
徐无忌并发编程笔记:线程池的核心参数都是干什么的?平时应该如何使用?
徐无忌并发编程笔记:线程池的核心参数都是干什么的?平时应该如何使用?完成:第一遍1.为什么说线程是重量级对象?创建与销毁一个线程并不像创建一个对象那么简单,需要调用操作系统内核的 API整个过程是一个偏重且耗时的操作并发的线程数量很多,且执行时间很多的任务就结束频繁的创建与销毁会大大降低系统效率需要一种办法可以对线程进行重复利用,完成任务后并不被销毁,可以继续执行其他任务2.线程池的设计思路是什么?线程池是一种线程的使用模式它为了降低线程使用过程中频繁的创建和销毁所带来的资源消耗与代原创 2020-07-21 15:55:25 · 250 阅读 · 0 评论 -
徐无忌并发编程笔记:synchronized和Lock锁的底层原理?它们有什么区别?
徐无忌并发编程笔记:synchronized和Lock锁的底层原理?它们有什么区别?完成:第一遍1.synchronized关键字如何使用?synchronized可以修饰:1. 修饰实例方法:对实例的对象进行加锁2. 修饰类的方法:当类对象进行加锁3. 修饰代码块:锁括号里面的对象进行加锁private Object object;public void test(){ sysnchronized(object){ //代码 }}2.synchronized原创 2020-07-21 14:15:11 · 624 阅读 · 0 评论 -
徐无忌并发编程笔记:无锁机制CAS及其底层实现原理?
徐无忌并发编程笔记:无锁机制CAS及其底层实现原理?完成:第一遍1.什么是CAS算法?compare and swap:比较与交换,是一种有名的无锁算法CAS带来了一种无锁解决线程同步,冲突问题ABA问题导致了CAS方案有一定缺陷方法:new AtomicInteger().incrementAndGet();作用:底层通过CAS算法实现线程安全累加操作2.CAS实现原理是怎样的?第一步: CAS涉及三个操作数:(1)需要读写的内存值V(2)预期值A(3)需要修改的最新值B第二步:原创 2020-07-21 13:01:25 · 233 阅读 · 0 评论 -
徐无忌并发编程笔记:如何合理地设置线程数?
徐无忌并发编程笔记:如何合理地设置线程数?完成:第一遍1.使用多线程的本质是为了什么?使用多线程,本质上就是提升程序性能性能简单来说就是感觉“变快”,但是需要有具体科学的度量性能的指标:一是延迟二是吞吐量我们所谓提升性能,从度量的角度主要是降低延迟,提高吞吐量但它们属于不同的维度一个是时间维度,一个是空间维度2.什么是延迟?延迟指的是发出请求到收到响应这个过程的时间;延迟越短,意味着程序执行得越快,性能也就越好3.什么是吞吐量?吞吐量指的是在单位时间内能处理请求的数量;吞吐量原创 2020-07-21 12:01:23 · 277 阅读 · 0 评论 -
徐无忌并发编程笔记:什么是多线程的上下文切换,有什么影响?如何进行优化
徐无忌并发编程笔记:什么是多线程的上下文切换,有什么影响?如何进行优化完成:第一遍1.什么是CPU时间片?CPU会给每个线程分配执行的时间,也就是CPU时间片CPU时间片是一个小的时间单位,一般为几十毫秒当线程用完分给它的时间片后,系统的计时器发出时钟中断,调度程序便停止该线程的运行,把它放入就绪队列的末尾;然后把CPU分给其他就绪的线程,同样也让它运行一个时间片,如此往复。2.什么是线程上下文切换?对于CPU而言,在一个时刻只能运行一个线程,当一个线程的时间片用完,或者因自身原因被迫暂停运行原创 2020-07-21 11:18:10 · 444 阅读 · 0 评论