摘要:
Semaphore源码分析 Semaphore的作用是在有限的资源里,当有N个线程进行访问时,如何进行资源的分配。 基本的使用方法是,创建一个Semaphore实例,并且指定permit的个数,当线程要获取许可时调用acquire()方法,当释放许可时调用release()方法,当没有可用的许可时, 阅读全文
摘要:
CyclicBarrier源码分析 CyclicBarrier的作用是让一组线程互相等待至某个状态后并行执行(相对外部来说是并行,其实内部还是串行) 基本的使用方法是创建一个CyclicBarrier实例,并且指定parties的个数,然后线程依次调用CyclicBarrier的await()方法让 阅读全文
摘要:
CountDownLatch源码分析 CountDowntLatch的作用是让主线程等待所有的子线程执行完毕之后再进行执行,同时它是基于AQS进行实现的,所以它底层肯定是通过自定义AQS共享模式下的同步器来实现的,该同步器需要重写AQS提供的tryAcquireShared()以及tryReleas 阅读全文
摘要:
ReentrantLock源码分析 ReentrantLock是独享锁,同时是基于AQS实现的,因此它底层肯定是通过自定义AQS独占模式下的同步器来实现独享锁,该同步器需要重写AQS提供的tryAcquire()和tryRelease()方法,只需要告诉AQS是否尝试获取同步资源和释放同步资源成功即 阅读全文
摘要:
AQS源码分析 AQS全称AbstractQueuedSynchronizer(抽象队列同步器) AQS中维护了一个被volatile修饰的int类型的同步状态state,以及CLH等待队列。 state同步状态用于维护同步资源被使用的情况,AQS本身并不关心state的值及其含义,完全由AQS的子 阅读全文
摘要:
Netty 主从Reactor多线程模式的源码实现 总览 EventLoopGroup到底是什么? EventLoopGroup是一个存储EventLoop的容器,同时他应该具备线程池的功能。 由于EventLoopGroup间接继承ScheduledExecutorService接口,因此其实现类 阅读全文
摘要:
Netty网络框架 Netty是一个异步的基于事件驱动的网络框架。 为什么要使用Netty而不直接使用JAVA中的NIO 1.Netty支持三种IO模型同时支持三种Reactor模式。 2.Netty支持很多应用层的协议,提供了很多decoder和encoder。 3.Netty能够解决TCP长连接 阅读全文
摘要:
JAVA中的NIO 标准的IO是基于字节流和字符流进行操作的,而JAVA中的NIO是基于Channel和Buffer进行操作的。 传统IO NIO 核心模块 NIO主要有三个核心部分:Selector、Channel、Buffer 数据总是从Channel读取到Buffer或者从Buffer写入到C 阅读全文
摘要:
1.简介 Redis中的每个Key-Value在内存中都会被划分成DictEntry以及代表Key和Value的对象。 DictEntry包含分别指向Key和Value对象的指针以及指向下一个DictEntry的指针。 Redis使用RedisObject来表示对象,由于Key固定是字符串类型,因此 阅读全文
摘要:
1.简介 Nginx是一个反向代理服务器,其启动速度极快、占用内存极少、抗高并发能力强,因此大量在互联网项目中应用。 Nginx访问速度快的原因: 1.动静分离,静态资源由Nginx直接进行管理,动态请求转发到后端。 2.Worker进程中的线程是AIO的(异步非阻塞),当接收到一个请求后将其放入到 阅读全文