
并发编程
周世文_围城
对自己狠一点,就成功了一半
展开
-
AQS实现原理
AQS实现原理标记锁资源的占用情况private volatile int state;ReentrantLock实现公平锁和非公平锁加锁: 通过ReentrantLock的加锁方法Lock进行加锁操作。 会调用到内部类Sync的Lock方法,由于Sync#lock是抽象方法,根据ReentrantLock初始化选择的公平锁和非公平锁,执行相关内部类的Lock方法,本质上都会执行AQS的Acquire方法。 ...原创 2020-09-02 19:26:13 · 202 阅读 · 0 评论 -
Disruptor之从Ringbuffer读取
如何使用Disruptor(二)从Ringbuffer读ConsumerBarrier与消费者这里我要稍微反过来介绍,因为总的来说读取数据这一过程比写数据要容易理解。假设通过一些“魔法”已经把数据写入到Ring Buffer了,怎样从Ring Buffer读出这些数据呢?(好,我开始后悔使用Paint/Gimp 了。尽管这是个购买绘图板的好借口,如果我继续写下去转载 2017-06-26 13:34:41 · 386 阅读 · 0 评论 -
Disruptor 写入 Ringbuffer
如何使用 Disruptor(三)写入 Ringbuffer这是 Disruptor 全方位解析(end-to-end view)中缺少的一章。当心,本文非常长。但是为了让你能联系上下文阅读,我还是决定把它们写进一篇博客里。本文的 重点 是:不要让 Ring 重叠;如何通知消费者;生产者一端的批处理;以及多个生产者如何协同工作。ProducerBarrier转载 2017-06-26 13:32:37 · 323 阅读 · 0 评论 -
Java并发工具类CountDownLatch和CyclicBarrier
Java并发工具类CountDownLatch和CyclicBarrier1.CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作,其构造函数接收一个int型的参数作为计数器,若想等待N个点完成,就传人N。此处的N个点,可指N个线程,也可以是1个线程中的N个步骤。主要的方法为CountDown()和await()。当调用CountDow原创 2017-06-22 16:39:39 · 281 阅读 · 0 评论 -
Executor,Executors,ExecutorService
1.Excutor 源码非常简单,只有一个execute(Runnable command)回调接口 public interface Executor { /** * Executes the given command at some time in the future. The command * may execute in a n转载 2017-06-21 18:01:28 · 299 阅读 · 0 评论 -
连接池技术
为什么要使用连接池数据库连接的建立及关闭资源消耗巨大。传统数据库访问方式:一次数据库访问对应一个物理连接,每次操作数据库都要打开、关闭该物理连接, 系统性严重受损。解决方案:数据库连接池(Connection Pool)。系统初始运行时,主动建立足够的连接,组成一个池.每次应用程序请求数据库连接时,无需重新打开连接,而是从池中取出已有的连接,使用完后,不再关闭,而是归还。原创 2017-06-20 14:34:46 · 478 阅读 · 0 评论 -
RabbitMQ的几种典型使用场景
RabbitMQ主页:https://www.rabbitmq.com/AMQPAMQP协议是一个高级抽象层消息通信协议,RabbitMQ是AMQP协议的实现。它主要包括以下组件:1.Server(broker): 接受客户端连接,实现AMQP消息队列和路由功能的进程。2.Virtual Host:其实是一个虚拟概念,类似于权限控制组,一个Virtual Host里面可转载 2017-09-04 17:22:47 · 297 阅读 · 0 评论 -
Java线程池ThreadPoolExecutor源码解析
线程池能够对线程进行有效的管理, 复用和数量上限的限制, 如果你需要创建多个线程来执行多个异步任务, 那么使用线程池显然要比频繁地 new Thread().start() 这种方式要好.Java 中的线程池是用 ThreadPoolExecutor 类来表示的. 我们今天就结合该类的源码来分析一下这个类内部对于线程的创建, 管理以及后台任务的调度等方面的执行原理. 我这里分析的是 Ora转载 2017-10-16 14:08:48 · 432 阅读 · 0 评论