并发多线程
wang123459
这个作者很懒,什么都没留下…
展开
-
秒杀
1.数据库实现(乐观锁)update t_seckill set num=num-#{buys}where sku=#{sku} and num-${buys}>=0问题:数据库并发量小,瓶颈2.redis实现(原子自增锁)java实现jedis3.针对秒杀场景的系统优化页面优化:灰色、抢商品静态化 CDN代理层拦截:挡大流量应用层:业务层CAS防止超卖原创 2018-01-18 16:24:38 · 280 阅读 · 1 评论 -
多线程理解
现代处理器大多含有多个CPU核心,那么对于运算量大任务,可以用多线程的方式拆解成多个小任务并发的执行,提高计算的效率。JAVA内存划分方法区:存储类信息、常量、静态变量等,线程共享堆:new出的实例对象都存储在这个区域,是GC的主战场,线程共享。虚拟机栈:进出栈。每个方法的执行都会创建栈帧,用于存储局部变量、操作数栈、动态链接等,虚拟机栈主要存储这些信息,线程私有本地方法栈:虚原创 2018-01-28 10:23:35 · 185 阅读 · 0 评论 -
Atomic、volatile、synchronized、ThreadLocal优缺点比较
1.AtomicAtomicInteger、AtomicLong、AtomicBoolean、AtomicReferenceCAS机制只实现单个变量原子操作Synchronized从偏向锁到轻量级锁再到重量级锁的过度。compare and swap:比较并替换CAS机制使用了3个基本操作数,内存值V,旧的预期值A,要修改的新值BSynchronized属于悲观锁,CAS属原创 2018-01-11 16:42:45 · 2446 阅读 · 0 评论 -
线程并发库
创建多线程1.继承Thread类,重写run方法是覆盖Thread类run方法2.创建Runnable,重写run方法,是Thread的target定时器 (java.util.Timer)schedule:调度3.线程互斥线程安全:多个线程同时操作一个共享对象。对象锁(必须是同一个锁) 类锁4.线程互斥和通信要用到共同数据(包括锁)要设计到同一个方法上,是高原创 2018-01-24 17:40:15 · 637 阅读 · 0 评论 -
高性能队列—Disruptor
背景Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。2011年,企业应用软件专家Martin Fowler专门撰写长文介绍。同年它还获得了Oracle官方的Duke大奖。目转载 2018-01-28 11:54:01 · 280 阅读 · 0 评论 -
多线程并发执行任务,取结果归集。终极总结:Future、FutureTask、CompletionService、CompletableFuture
目录1.Futrue原理:demo:建议:此种方法可实现基本目标,任务并行且按照提交顺序获取结果。使用很普遍,老少皆宜,就是CPU有消耗,可以使用!2.FutureTask原理:demo:建议:demo1在特定场合例如有十分耗时的业务但有依赖于其他业务不一定非要执行的,可以尝试使用。demo2多线程并发执行并结果归集,这里多套一层FutureTask比较鸡肋(直接返回Future简单明了)不建议使...转载 2018-03-26 16:46:22 · 815 阅读 · 0 评论 -
理解线程池的原理
1.关于线程池线程池的技术背景在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其...转载 2018-08-26 10:06:39 · 207 阅读 · 0 评论 -
如何合理设置线程池大小
接着上一篇探讨线程池留下的尾巴,如何合理的设置线程池大小。 要想合理的配置线程池的大小,首先得分析任务的特性,可以从以下几个角度分析:任务的性质:CPU密集型任务、IO密集型任务、混合型任务。任务的优先级:高、中、低。任务的执行时间:长、中、短。任务的依赖性:是否依赖其他系统资源,如数据库连接等。性质不同的任务可以交给不同规模的线程池执...转载 2018-08-26 11:44:51 · 1206 阅读 · 0 评论