多线程
天涯泪小武
开源贡献者,有代码洁癖。京东coder。
展开
-
开源异步并行框架,完成任意的多线程编排、阻塞、等待、串并行结合、强弱依赖
本文首发于京东零售公众号,https://mp.weixin.qq.com/s/17OAAbCKQND-AjTdf43TGwnetty是一个经典的网络框架,提供了基于NIO、AIO的方式来完成少量线程支持海量用户请求连接的模型。netty里面充斥了大量的非阻塞回调模式,主要是靠Future/Promise异步模型来实现的。Future是java.util.concurrent.Future...原创 2020-01-14 19:34:56 · 3284 阅读 · 0 评论 -
任意组合、编排的多线程并发框架,支持任意阻塞、等待、串并行组合,回调、超时、默认值等
并发场景可能存在的需求之——任意编排1 多个执行单元的串行请求2 多个执行单元的并行请求3 阻塞等待,串行的后面跟多个并行4 阻塞等待,多个并行的执行完毕后才执行某个5 串并行相互依赖6 复杂场景并发场景可能存在的需求之——每个执行结果的回调传统的Future、CompleteableFuture一定程度上可以完...原创 2019-12-25 16:29:53 · 2580 阅读 · 0 评论 -
深入浅出AQS之共享锁模式
搞清楚AQS独占锁的实现原理之后,再看共享锁的实现原理就会轻松很多。两种锁模式之间很多通用的地方本文只会简单说明一下,就不在赘述了,具体细节可以参考我的上篇文章深入浅出AQS之独占锁模式一、执行过程概述获取锁的过程:当线程调用acquireShared()申请获取锁资源时,如果成功,则进入临界区。 当获取锁失败时,则创建一个共享类型的节点并进入一个FIFO等待队列,然后被挂起等待唤醒...转载 2019-09-25 19:23:23 · 872 阅读 · 0 评论 -
深入浅出AQS之独占锁模式
AbstractQueuedSynchronizer(以下简称AQS)作为java.util.concurrent包的基础,它提供了一套完整的同步编程框架,开发人员只需要实现其中几个简单的方法就能自由的使用诸如独占,共享,条件队列等多种同步模式。我们常用的比如ReentrantLock,CountDownLatch等等基础类库都是基于AQS实现的,足以说明这套框架的强大之处。鉴于此,我们开发人员更...转载 2019-09-25 19:20:50 · 341 阅读 · 1 评论 -
Springboot分别使用乐观锁和分布式锁(基于redisson)完成高并发防超卖
在电商中经常会有防超卖的需求,本质上是对一条数据的多线程并发情况下的数据安全性进行控制。譬如一个商品goods,库存是100,在多线程都去读取修改的情况下,会产生数据错乱。不加锁的情况我们来看一个简单的例子,有个goods表,里面有个int型字段amount。我们用多线程来频繁修改amount的值,看看结果。 @Transactional(rollbackFor = Except...原创 2019-05-10 15:11:17 · 17301 阅读 · 35 评论 -
深入理解Java之线程池
转载自:http://www.importnew.com/19011.html#comment-653957在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个...转载 2018-05-29 14:19:53 · 671 阅读 · 0 评论 -
2 Java8对于多线程并发的一些新支持-CompletableFuture
CompletableFuture这个类是Java8提供的Future的升级版,提供了很多多线程间实用的方法。譬如一个线程完成后执行另一个,或者两个线程完成后再执行第三个,或者一个线程执行完后传递结果给下一个线程,或者两个线程同时执行、任意一个完毕后就执行第三个而不等待另一个等等。前面有一篇使用Disruptor的例子,也是完成多线程间的协同、并发等功能的。这两个能完成的功能有很多比较类似,但本质...转载 2018-04-17 16:21:10 · 7916 阅读 · 0 评论 -
高性能队列Disruptor的使用
转载自:https://blog.csdn.net/nuaazhaofeng/article/details/72918467一、什么是 Disruptor从功能上来看,Disruptor 是实现了“队列”的功能,而且是一个有界队列。那么它的应用场景自然就是“生产者-消费者”模型的应用场合了。可以拿 JDK 的 BlockingQueue 做一个简单对比,以便更好地认识 Disruptor 是什么...转载 2018-03-29 11:39:27 · 800 阅读 · 0 评论 -
1 Java8对于多线程并发的一些新支持-LongAdder
我们知道AtomicLong、AtomicInteger是基于硬件级别cas实现的保证线程安全的自增类,能保证原子化的自增操作。在多线程下,性能远好于加锁synchronized。AtomicLong的实现是当多线程并发自增、自减时,通过cas指令从机器指令级别操作保证并发的原子性。制约性能的是高并发时cas失败几率会变高。失败后会重试,越多线程失败、越多次重试,失败几率就会更高,性能就会下降。J...原创 2018-04-17 12:49:09 · 2440 阅读 · 0 评论 -
使用Disruptor完成多线程下并发、等待、先后等操作
Java完成多线程间的等待功能:场景1:一个线程等待其他多个线程都完成后,再进行下一步操作(如裁判员计分功能,需要等待所有运动员都跑完后,才去统计分数。裁判员和每个运动员都是一个线程)。场景2:多个线程都等待至某个状态后,再同时执行(模拟并发操作,启动100个线程 ,先启动完的需要等待其他未启动的,然后100个全部启动完毕后,再一起做某个操作)。以上两个场景都较为常见,Java已经为上面的场景1和...原创 2018-04-02 13:35:30 · 8676 阅读 · 0 评论 -
使用Disruptor完成多个消费者不重复消费消息
上一篇https://blog.csdn.net/tianyaleixiaowu/article/details/79787377里讲了Disruptor完成多个消费者并行、顺序重复消费Event。重复消费类似于kafka中,同一个topic被不同的group的消费者消费。这样的场景比较常见。当然更常见的场景是不重复消费,也就是一个消息只能被消费一次。Disruptor同样可以完成不重复消费的功能...原创 2018-04-08 10:38:13 · 8705 阅读 · 1 评论 -
看一遍就懂,详解java多线程——volatile
多线程一直以来都是面试必考点,而volatile、synchronized也是必问点,这里我试图用容易理解的方式来解释一下volatile。了解volatile之前,先来看一下它的最大特点和作用:1原创 2017-07-21 13:33:56 · 1941 阅读 · 1 评论