互动
最近评论
最近评论内容 TODO
正式迁移到halo2
Halo Theme Mai
更多信息请关注 GitHub
一、Redis分布式锁的原理Redis分布式锁的原理就是在Redis里面占住一个“坑位”,当有”其他人“也要占这个坑位的时候,发现已经”坑位“已经被占了,那就加锁失败,就能放弃或者重试。“占坑”一般使用setex(set if not exists)命令,只允许一个客户端来设置键-值(占坑)。先到先
一、服务端socket初始化1.1 创建服务端ChannelNetty在创建Channel的时候是把Jdk的Channel再次封装成自己的Channel。那么开始探索Netty是怎么创建出Jdk的Channel的。那么就从一段常用的代码开始:EventLoopGroup bossGroup = ne
玩转Java线程池:玩转Java线程池一:ThreadPoolExecutor的执行流程和原理玩转java线程池二:ThreadPoolExecutor的使用一、Executor的结构在Java中线程是一个工作单元,也是执行机制。JDK1.5的JUC的出现,工作单元就和工作机制分离。创建线程的两个接
一、AOP的术语和流程1.1 术语连接点(join point):具体被拦截的对象。在spring中支持的是方法,拦截的对象是方法。譬如在做web开发的时候,我们相对每个controller的方法都进行拦截,打印一下日志。这时候就可以用到AOP进行拦截,这些controller里面的方法就是连接点。
一、启动流程在我们初学Tomcat的时候,会去官网下载,解压之后运行bin目录下的startup.sh/startup.bat。1、Tomcat是用Java编写的一个程序,所以是需要在JVM上运行,通过启动脚本来运行Tomcat的启动类Bootstrap。2、Bootstrap是一个启动类,主要任务
一、创建线程池ThreadPoolExecutor有四个构造方法:public ThreadPoolExecutor(int corePoolSize,                              int maximumPoolSize,
一、为什么要用线程池在现实开发中是不会手动地去new一个线程出来用的,阿里巴巴的Java开发手册中也写到不要手动创建线程,要使用线程池。几乎所有的需要异步或者并发执行的程序都可以使用线程池。使用线程池有三个好处:降低资源的消耗:在线程池中有一些已经创建好的线程,通过重复利用这些线程,可以减低线程的创
一、Tomcat的组件创建关系上两篇文章中详细的阐述了Tomcat中的组件以及之间的关系,下面通过一张简化的图描述一下:想要让Tomcat能够对外提供服务,还需要创建、组装并启动这些组件。在服务停止的时候,还需要释放资源,销毁这些组件。所以Tomcat需要动态地管理这些组件地生命周期。Tomcat的
一、Servlet容器的结构Tomcat 设计了 4 种容器,分别是 Engine、Host、Context 和 Wrapper。这 4 种容器不是相互独立的关系,而是父子关系,逐层包含。如下图所示:Tomcat通过这样的分层的架构设计,使得Servlet容器具有良好的灵活性。一个Service最多
一步一步了解Java中的线程池!
一、Tomcat的整体架构设计Tomcat有2个核心功能:1、处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化。2、加载和管理 Servlet,以及具体处理 Request 请求。因此 Tomcat 设计了两个核心组件连接器(Connector)和容器(C
一、前言在Spring中,数据库事务是通过AOP技术来提供服务的。使用原生的JDBC操作时会存在大量的try{}catch{}finally{}语句,所以会存在大量的冗余代码,例如打开和关闭数据库连接和数据库事务回滚等。通过Spring的AOP之后,这些冗余的代码就都被处理了。二、回顾JDBC的数据