道阻且长,行则将至

Scroll Down

并发队列 BlockingQueue

BlockingQueue开篇先介绍下 BlockingQueue 这个接口的规则,后面再看其实现。首先,最基本的来说, BlockingQueue 是一个先进先出的队列(Queue),为什么说是阻塞(Blocking)的呢?是因为 BlockingQueue 支持当获取队列元素但是队列为空时,会阻

ThreadLocal笔记

ThreadLocal数组移动的原因在清理无效数据或者遇到相同的entry的key的情况下:遇到的entry是有效的,但是不是在自己原本的位置上,而是被hash冲突所迫而在其他位置上的,则把他们搬去离原本位置最近的后边空槽上。这样在get的时候,会最快找到这个entry,减少开放定址法遍历数组的时间

AQS原理总结

概述Java 中的很多同步类,如 ReentrantLock、CountDownLatch 等都是基于 AbstractQueuedSynchronizer(简称为AQS)实现的。AQS 是一种提供原子式管理同步状态、阻塞和唤醒线程功能以及维护队列模型的抽象框架,用来构建锁或者其他同步组件。本篇文章

Chain of Responsibility责任链模式

概述我们有时候会考虑将多个对象组成一条职责链,然后按照它们在职责链上的顺序一个一个地找出到底应该谁来负责处理。这种模式被称为Chain of Responsibility模式(责任链)。使用Chain of Responsibility模式可以弱化请求方和处理方之间的关联关系,让双方各自都成为可独立

桥接模式

概述Bridge的意思是桥梁。就像现实世界中,桥梁的功能是将河流的两侧连接起来一样,Bridge模式的作用也是将两样东西连接起来,它们分别是类的功能层次结构和类的实现层次结构。Bridge模式的作用是在类的功能层次结构和类的实现层次结构之间搭建桥梁。类的层次结构的两个作用1、希望增加新功能时假设现在

Netty事件调度层

再谈 Reactor 线程模型网络框架的设计离不开 I/O 线程模型,线程模型的优劣直接决定了系统的吞吐量、可扩展性、安全性等。目前主流的网络框架几乎都采用了 I/O 多路复用的方案。Reactor 模式作为其中的事件分发器,负责将读写事件分发给对应的读写事件处理者。大名鼎鼎的 Java 并发包作者

Java服务端Socket

概述客户端就是向监听连接的服务器打开一个Socket的程序。不过,只有客户端Socket还不够,如果不能与服务器对话,客户端并没有什么用处。要创建一个Socket,需要知道希望连接哪个Internet主机。编写服务器时,无法预先了解哪个主机会联系你,即使确实知道,你也不清楚哪个主机希望何时与你联系。

洞察设计模式的底层逻辑

设计模式是开发同学经常聊到的话题,也经常被用到实际的开发项目中,熟练的人可以做到信手拈来,不熟悉的人陷入苦思冥想中。笔者认为,不仅仅要掌握设计模式的用法,更要洞察设计模式的底层逻辑,只有那样,才能做到遇到实际的问题可以使用合适的设计模式去解决。一 你应该关注底层逻辑1 设计模式的段子段子一:你让

死锁解决方案

解决总体的思路就是1、使用乐观锁mvcc机制,读取数据不上锁,在读情况下共享资源2、保证资源的加锁顺序,避免循环等待的产生3、减少对资源的占用时间和占用范围,避免长事务,锁粒度变大的情况,可以大大减少死锁产生的概率

NIO demo

Client import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SocketChannel; /** * */public