
并发编程 Juc 和优化
文章平均质量分 87
并发编程和优化
959y
奋斗ing
展开
-
定时轮询java
业务场景我们买火车票或者叫外卖的时候,下完单之后会跳转到支付页面,页面里通常会有一个计时器,要求在指定时间内完成支付,否则订单就会被自动取消。这就是延时任务的一个典型业务场景。分析这个场景,其实最关键的就是如何在订单超时的时候立即触发取消订单的动作。1.定时任务轮询db用户下单后db中会生成一条订单记录,记录了订单号、用户ID、创建时间、订单详情、订单状态等信息。假设超时时间是600秒,我们后台起一个定时任务,每隔固定时间运行一次,每次扫描db中的超时订单select * from order whe原创 2021-12-27 00:10:09 · 4536 阅读 · 2 评论 -
juc之常用4大并发工具类 (四)
juc的4大工具: CountDownLatch, CyclicBarrier, Semaphore, Exchanger原创 2022-11-17 16:01:17 · 1095 阅读 · 0 评论 -
AQS之LimitLatch分析 (十)
AQS之LimitLatch 分析原创 2022-11-14 21:13:50 · 887 阅读 · 0 评论 -
AQS之ReentrantReadWriteLock分析 (九)
AQS之ReentrantReadWriteLock分析 1原创 2022-11-13 19:51:35 · 778 阅读 · 0 评论 -
AQS之CountDownLatch分析 (八)
AQS之CountDownLatch减少计数源码分析原创 2022-11-11 21:41:47 · 1074 阅读 · 0 评论 -
AQS之Semaphore分析 (七)
AQS之Semaphore分析原创 2022-11-10 19:00:27 · 1236 阅读 · 0 评论 -
AQS之Condition分析 (六)
AQS之Condition分析原创 2022-11-09 18:26:36 · 964 阅读 · 0 评论 -
AQS之ReentrantLock分析 (五)
AQS之ReentrantLock分析 2 通过案例分析代码的过程原创 2022-11-08 21:20:26 · 865 阅读 · 0 评论 -
AQS之ReentrantLock分析 (四)
AQS 之ReentrantLock分析 1原创 2022-11-07 14:34:43 · 849 阅读 · 0 评论 -
AQS之共享锁分析 (三)
AQS 之共享锁分析原创 2022-11-05 16:41:36 · 896 阅读 · 0 评论 -
AQS之排斥锁分析 (二)
AQS 排他锁分析原创 2022-11-04 19:48:20 · 794 阅读 · 0 评论 -
AQS之基础分析 (一)
AQS 之 基础分析原创 2022-11-02 17:23:25 · 779 阅读 · 0 评论 -
Java性能优化的七个方向
性能优化的方向原创 2022-07-30 14:49:12 · 1123 阅读 · 0 评论 -
高并发框架 Disruptor
Disruptor 内存队列的, 可以提高性能的java框架原创 2022-07-29 21:44:01 · 919 阅读 · 0 评论 -
juc之ConcurrentSkipListMap (三)
1.ConcurrentSkipListMap概述2.ConcurrentSkipListMap使用建议3.SkipList 跳表介绍4.ConcurrentSkipListMap5.ConcurrentSkipListMap的查找6.ConcurrentSkipListMap的删除7.ConcurrentSkipListMap的插入原创 2022-06-04 16:03:18 · 444 阅读 · 0 评论 -
juc之CopyOnWriteArrayList和CopyOnWriteArraySet (一)
juc之CopyOnWriteArraytList和CopyOnWriteArraySet原创 2022-05-30 15:24:30 · 347 阅读 · 0 评论 -
Queue常用类解析之PriorityQueue(一)
Queue 队列 的实现之一: PriorityQueue 有优先级的队列原创 2022-05-27 19:35:03 · 419 阅读 · 0 评论 -
并发编程的12种业务场景
1.简单定时任务2.监听器3.收集日志4.excel导入5.查询接口6.获取用户上下文8.传递参数9.模拟高并发10.处理mq消息11.统计数量12.延迟定时任务 .原创 2022-05-26 16:58:02 · 584 阅读 · 0 评论 -
Guava缓存
Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码,使代码更为优雅,另一方面它补充了很多jdk中没有的功能,能让我们开发中更为高效。<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version&原创 2022-03-11 20:05:20 · 1260 阅读 · 0 评论 -
高并发设计的技术方案
文章目录1.负载均衡2.分布式微服务3.缓存机制4.分布式关系型数据库4.1 垂直分表4.2 水平分表4.3 开源框架分类4.4 实现方案5.分布式消息队列5.1 常见的消息队列5.2 消息队列的场景6.CDN 内容分发网络7.其他8.总结1.负载均衡靠优化单台机器的内存、CPU、磁盘、网络带宽,使其发挥极致性能,已经不太现实。负载均衡,它的职责是将网络请求 “均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。原创 2022-04-01 15:26:41 · 4526 阅读 · 0 评论 -
高并发高可用高性能的解决方案
文章目录1.难题与方案2.具体措施2.1 页面静态化2.2 图片服务器分离2.3 数据库集群、库表散列1.难题与方案1、亿级流量电商网站的商品详情页系统架构面临难题:对于每天上亿流量,拥有上亿页面的大型电商网站来说,能够支撑高并发访问,同时能够秒级让最新模板生效的商品详情页系统的架构是如何设计的?解决方案:异步多级缓存架构+nginx本地化缓存+动态模板渲染的架构2、redis企业级集群架构面临难题:如何让redis集群支撑几十万QPS高并发+99.99%高可用+TB级海量数据+企业级数据备份与原创 2022-04-11 14:21:07 · 4624 阅读 · 0 评论 -
并发编程中的10个坑以及对应的解决方案
1. SimpleDateFormat线程不安全@Servicepublic class SimpleDateFormatService { public Date time(String time) throws ParseException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return dateFormat.parse(time);.原创 2022-05-11 14:10:23 · 498 阅读 · 0 评论 -
juc之CurrentHashMap (二)
我们熟知的缓存技术(比如redis、memcached)的核心其实就是在内存中维护一张巨大的哈希表,还有大家熟知的HashMap、CurrentHashMap等的应用。文章目录ConcurrentHashMap与HashMap等的区别HashMapHashTableConcurrentHashMapJDK1.7版本的CurrentHashMap的实现原理JDK1.8版本的CurrentHashMap的实现原理总结ConcurrentHashMap与HashMap等的区别HashMap我们知道Hash原创 2021-08-04 11:47:57 · 3039 阅读 · 0 评论 -
MESI(缓存一致性协议)
现在的处理器都是多核处理器,并且每个核都带有多个缓存(指令缓存和数据缓存,见下图)。为什么需要缓存呢,这是因为CPU访问内存的速度比较慢,所以在CPU和内存之间加了个缓存以提高访问速度。既然每个核都有缓存,那么假设两个核或者多个核同时访问同一个变量时这些缓存是如何进行同步的呢(缓存细分为一个个缓存行),这就有了MESI协议。MESI中的状态CPU中每个缓存行(caceh line)使用4种状态进行标记(使用额外的两位(bit)表示):M: 被修改(Modified)该缓存行只被缓存在该CPU的缓存中原创 2021-07-27 15:38:24 · 571 阅读 · 0 评论 -
偏向锁、轻量级锁、重量级锁、自旋锁原理
文章目录一、简介二、Java对象头中的Mark Word三、偏向锁四、轻量级锁五、重量级锁六、自旋锁七、锁升级过程一、简介在讲解这些锁概念之前,我们要明确的是这些锁不等同于Java API中的ReentratLock这种锁,这些锁是概念上的,是JDK1.6中为了对synchronized同步关键字进行优化而产生的的锁机制。这些锁的启动和关闭策略可以通过设定JVM启动参数来设置,当然在一般情况下,使用JVM默认的策略就可以了。二、Java对象头中的Mark WordHotSpot中,Java的对象内存原创 2021-07-08 20:12:49 · 1694 阅读 · 0 评论 -
volatile为什么不能保证原子性
首先要了解的是,volatile可以保证可见性和顺序性,这些都很好理解,那么它为什么不能保证原子性呢?可见性可见性与Java的内存模型有关,模型采用缓存与主存的方式对变量进行操作,也就是说,每个线程都有自己的缓存空间,对变量的操作都是在缓存中进行的,之后再将修改后的值返回到主存中,这就带来了问题,有可能一个线程在将共享变量修改后,还没有来的及将缓存中的变量返回给主存中,另外一个线程就对共享变量进行修改,那么这个线程拿到的值是主存中未被修改的值,这就是可见性的问题。volatile很好的保证了变量的可见原创 2021-07-09 14:58:03 · 422 阅读 · 0 评论 -
Java锁粗化和锁消除
锁粗化通常情况下,为了保证多线程间的有效并发,会要求每个线程持有锁的时间尽可能短,但是大某些情况下,一个程序对同一个锁不间断、高频地请求、同步与释放,会消耗掉一定的系统资源,因为锁的讲求、同步与释放本身会带来性能损耗,这样高频的锁请求就反而不利于系统性能的优化了,虽然单次同步操作的时间可能很短。锁粗化就是告诉我们任何事情都有个度,有些情况下我们反而希望把很多次锁的请求合并成一个请求,以降低短时间内大量锁请求、同步、释放带来的性能损耗。————————1. @Test public voi原创 2021-07-25 21:07:57 · 496 阅读 · 0 评论 -
synchronized底层原理是什么
一、synchronized的使用方式在语法上,要使用synchronized关键字,需要把任意一个非null对象作为"锁"对象,也就是需要一个对象监视器(Object Monitor)。总的来说有三种用法:1.1 作用在实例方法修饰实例方法,相当于对当前实例对象this加锁,this作为对象监视器。public synchronized void hello(){ System.out.println("hello world");}1.2 作用在静态方法修饰静态方法,相当于对当前原创 2021-08-08 23:51:32 · 3213 阅读 · 0 评论 -
线程池面试 [21]
1.为什么要使用线程池?创建线程和销毁线程的花销是比较大的,这些时间有可能比处理业务的时间还要长。这样频繁的创建线程和销毁线程,再加上业务工作线程,消耗系统资源的时间,可能导致系统资源不足。(我们可以把创建和销毁的线程的过程去掉)2.线程池有什么作用?线程池作用就是限制系统中执行线程的数量。1、提高效率 创建好一定数量的线程放在池中,等需要使用的时候就从池中拿一个,这要比需要的时候创建一个线程对象要快的多。2、方便管理 可以编写线程池管理代码对池中的线程同一进行管理,比如说启动时有该程序创建100原创 2021-09-13 15:53:54 · 684 阅读 · 0 评论 -
AQS详解
AQS是AbstractQueuedSynchronizer的简称。AQS提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,如下图所示。AQS为一系列同步器依赖于一个单独的原子变量(state)的同步器提供了一个非常有用的基础。子类们必须定义改变state变量的protected方法,这些方法定义了state是如何被获取或释放的。鉴于此,本类中的其他方法执行所有的排队和阻塞机制。子类也可以维护其他的state变量,但是为了保证同步,必须原子地操作这些变量。使用一个volatile的int类原创 2021-11-26 17:18:38 · 29673 阅读 · 1 评论 -
JUC atomic原子操作类之18罗汉增强
18罗汉:1.AtomicBoolean2.AtomicInteger3.AtomicIntegerArray4.AtomicIntegerFieldUpdater5.AtomicLong6.AtomicLongArray7.AtomicLongFieldUpdater8.AtomicMarkableReference9.AtomicReference10.AtomicReferenceArray11.AtomicReferenceFieldUpdater12.AtomicStamp原创 2021-12-23 13:59:35 · 364 阅读 · 0 评论 -
CompletableFuture异步编排
文章目录1.业务问题2.CompletableFuture介绍3.创建异步对象4.计算完成时回调方法5.线程串行化与并行化方法6.多任务组合7.优化商品详情页1.业务问题询商品详情页的逻辑非常复杂,数据的获取都需要远程调用,必然需要花费更多的时间。假如商品详情页的每个查询,需要如下标注的时间才能完成获取sku的基本信息 1.5s获取sku的图片信息 0.5s获取spu的所有销售属性 1ssku价格 1.5s那么,用户需要4.5s后才能看到商品详情页的内容。很显然是不能接受原创 2022-01-30 15:15:15 · 276 阅读 · 0 评论 -
AQS_面试 [31]
文章目录1.什么是AQS2.AQS的核心思想是什么?它是怎么实现的?3.AQS原理1.什么是AQSAQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。AQS是一个用来构建锁和同步器的框架,比如ReentrantLock,CountDownLatch, Semaphore,ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于AQS的。AQS是用来构建锁或者其原创 2022-02-27 17:41:46 · 1193 阅读 · 0 评论