
并发编程
文章平均质量分 95
不能说的秘密go
求知若饥,虚心若愚
展开
-
java线程池---编写自己的线程池
java线程池---编写自己的线程池原创 2016-03-16 12:25:57 · 13492 阅读 · 13 评论 -
高性能的异步处理框架Disruptor(二)——Disruptor对RingBuffer的读写策略
前文了解了Disruptor与RingBuffer的基础知识后,接下来了解Disruptor对 ringbuffer的访问控制策略。Disruptor对RingBuffer的读取策略假设消费者(Consumer)是一个想从 Ring Buffer 里读取数据的线程,它可以访问 ConsumerBarrier对象——这个 对象由 RingBuffer 创建并且代表消费者与 RingBuffer ...原创 2019-10-09 11:01:35 · 863 阅读 · 0 评论 -
高性能的异步处理框架Disruptor(一)——认识RingBuffer与Disruptor
Disruptor是什么Disruptor 是一个高性能的异步处理框架。可以认为是最快的消息框架(轻量的 JMS),也可以认为是一个观察者模式的实现,或者事件监听模式的实现。它允许开发者使用多线程技术去创建基于任务的工作流。Disruptor 能用来并行创建任务,同时保证多个处理过程的有序性。Disruptor 的目标就是快,高效。ArrayBlockingQueue也是一个非常优秀的有界队...原创 2019-10-09 10:31:51 · 1236 阅读 · 0 评论 -
使用MongoDB实现消息队列的异步消息功能
一、消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。自己实现一个较完善的消息队列要考虑高可用、顺序和重复消息、可靠投递、消费关系解原创 2018-01-29 00:51:21 · 10237 阅读 · 0 评论 -
CPU load过高产生的原因及排查
之前面试被问到,造成CPU load过高的原因有哪些?如何快速排查其原因? 开一贴,总结该相关知识原创 2017-09-24 20:01:33 · 59504 阅读 · 4 评论 -
Java中的线程池
线程池是使用场景最多的并发框架,几乎所有需要异步和并发执行任务的程序都可以使用线程池。类似于数据库链接池,使用线程池能为程序带来如下好处: 1、降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 2、提高相应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 3、提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性原创 2017-01-15 23:55:02 · 1150 阅读 · 4 评论 -
Java中高效的并发容器----ConcurrentHashMap
并发编程大师Doug Lea为JDK提供了一些非常优秀的并发容器和框架,让我们通过一个较简单的类ConcurrentHashMap来见识大师操刀编写的并发容器和框架的精妙。HashMap的不足HashMap的最大的问题就是线程不安全,虽然Map接口提供了一个线程安全的类HashTable,但HashTable类效率非常低下。于是,ConcurrentHashMap便闪亮登场。原创 2016-08-24 23:30:18 · 2843 阅读 · 0 评论 -
如何使用Lock接口来实现等待/通知机制
关于java中的等待/通知机制(http://blog.youkuaiyun.com/canot/article/details/50879963)在之前的解决方案中都是基于synchronized以及Object类的方法wait(),wait(long timeout),notify()以及notifyAll()方法来实现。现在我们了解了java中的另一种锁Lock之后我们尝试能不能用Lock代替synchr原创 2016-08-09 00:15:29 · 2319 阅读 · 0 评论 -
完美解决WebSocket 服务器 The WebSocket session [0] has been closed and no method...异常信息
最近项目需要web客户端与服务器保持长链接的场景并需要服务器向所有链接的客户端推送消息,于是自然使用了WebSocket技术,自然要考虑到服务器于多个客户端线程安全的问题。于是乎,想当然的在WebSocket服务器端通过一个线程安全的队列来保持所有客户端原创 2016-09-10 15:53:42 · 49217 阅读 · 23 评论 -
Java中的阻塞队列
阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。原创 2016-08-27 21:35:49 · 1811 阅读 · 0 评论 -
Java中的锁-Lock接口解析
提到java中的锁,相信大家都知道它是用来控制多个线程访问共享资源的方式(即锁能防止多个线程同时访问空享资源而出现线程安全问题)。在实践过程中使用最多的也最常见的锁就是 synchronized 在jdk1.5之前也仅仅有这一种锁而已。在jdk1.5之后,并发包中新增了Lock接口原创 2016-07-27 23:51:13 · 20976 阅读 · 2 评论 -
生产者/消费者模式(阻塞队列) 一个经典的并发模型
生产消费者模式也是关于线程阻塞的问题,生产消费者模式是通过观察者模式来实现的。之前在编写一个通讯软件的时候用到了这种模式,通过维护一个BlockingQueue来完成Socket的消息发送原创 2016-05-30 22:57:01 · 14425 阅读 · 1 评论 -
volatile关键字解析(jdk1.5之后)
学习过并发编程的同学应该对volatile关键字并不陌生。它也是用来保证多线程读写数据时保证数据的一致性,但它不如synchronized强大。synchronized是在执行代码块或是方法体时中隐式的加锁而禁止其他线程来访问。而volatile仅仅是对某个变量的修改及时的可见于其他的线程原创 2016-05-02 09:44:19 · 5763 阅读 · 3 评论 -
理解java线程的中断(interrupt)
一个线程在未正常结束之前, 被强制终止是很危险的事情. 因为它可能带来完全预料不到的严重后果原创 2016-04-07 17:39:33 · 41996 阅读 · 16 评论 -
java线程之间的通信(等待/通知机制)
线程开始运行,拥有自己的栈空间,就如同一个脚本一样,按照代码一步步的执行直到终止。但是,每个运行中的线程,如果仅仅是孤立地运行,那么没有太大的价值,但如果多个线程能够相互配合完成工作,这将会带来巨大的价值。原创 2016-03-13 20:33:43 · 7168 阅读 · 0 评论 -
<转> JAVA CAS原理深度分析
<转> JAVA CAS原理深度分析转载 2016-02-28 11:41:51 · 2279 阅读 · 0 评论 -
使用并发编程的挑战
编程中使用多线程的目的是为了让程序执行的更快,效率更高。所以很多人想当然的认为多线程的执行效率一定比单线程的高。但在进行并发编程时,会发现试图使用多线程来提高程序的整体运行效率,会面临很多挑战。原创 2016-02-27 21:14:32 · 1427 阅读 · 0 评论 -
自己实现一个简单的支持并发的Web服务器
编写一个支持并发访问的Web服务器来处理一些简单的HTTP请求/响应原创 2016-03-16 17:31:23 · 3475 阅读 · 0 评论 -
高性能的异步处理框架Disruptor(三)——Disruptor消费者的依赖关系
前文解释了Disruptor的生产者,消费者的简单工作流程。接下来学习当Disruptor的多个消费者存在依赖关系时,Disruptor对RingBuffer中的消息如何按照消费者的依赖关系来处理。Disruptor系统的最初设计是为了支持需要按照特定的顺序发生的阶段性类似流水线事件,这种需求在企业应用系统开发中很常见。如上图所示,对于独立的一个生产者和三个消费者。一个比较常见的依赖结构是:...原创 2019-10-09 22:08:45 · 1266 阅读 · 0 评论