- 博客(38)
- 资源 (6)
- 收藏
- 关注
原创 【Spring Framework】SmartInitializingSingleton解析以及使用
SmartInitializingSingleton
2019-05-16 17:15:46
3873
原创 【Spring Framework】BeanPostProcessor解析以及使用
【Spring Framework】BeanPostProcessor解析以及使用
2019-05-10 10:13:18
268
原创 【Spring Framework】Spring源码Bean创建及依赖注入的实现
【Spring Framework】Spring源码Bean创建及依赖注入的实现
2019-05-09 11:05:13
408
原创 【Java并发】Executor框架和线程池ThreadPoolExecutor的使用
【Java并发】线程池ThreadPoolExecutord的使用
2019-04-30 10:53:26
432
原创 【Java并发】AQS四:AbstractQueuedSynchronizer内部方法分类详细
AQS提供一个框架来实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量、事件等)。该类被设计为大多数类型的同步器的有用基础,这些同步器依赖于单个原子 state 值来表示状态。子类必须定义更改此状态的受保护方法,并定义该状态对于正在获取或释放的对象的含义。鉴于此,该类中的其他方法执行所有排队和阻塞机制。子类可以维护其他状态字段,但是只跟踪使用方法getState()、setStat...
2019-04-24 13:58:46
247
原创 【Java并发】AQS三:AbstractQueuedSynchronizer同步基础框架内部条件等待ConditionObject
ConditionObject条件实现AQS作为Lock接口实现的基础。该类的方法文档从锁和条件用户的角度描述了机制,而不是行为规范。该类的导出版本通常需要附带描述依赖于关联的AbstractQueuedSynchronizer的条件语义的文档。public class ConditionObject implements Condition, java.io.Serializable { ...
2019-04-23 16:32:47
360
原创 【Java并发】AQS二:AbstractQueuedSynchronizer同步基础框架内部Node
/** * 等待队列节点类 * * 等待队列是“CLH”(Craig、Landin和Hagersten)锁队列的变体。CLH锁通常用于自旋锁。相反,我们使用它们来阻塞同步器, * 但是使用相同的基本策略,即在其节点的前身中保存关于线程的一些控制信息。每个节点中的“status”字段跟踪线程是否应该阻塞。 * 节点在其前任节点释放时发出信号。否则,队列的每个节点都充当一个特定的通知样式的监...
2019-04-23 08:34:07
219
原创 【Java并发】AQS一:AbstractQueuedSynchronizer同步工具介绍
AQS提供一个框架来实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量、事件等)。该类被设计为大多数类型的同步器的有用基础,这些同步器依赖于单个原子 state 值来表示状态。子类必须定义更改此状态的受保护方法,并定义该状态对于正在获取或释放的对象的含义。鉴于此,该类中的其他方法执行所有排队和阻塞机制。子类可以维护其他状态字段,但是只跟踪使用方法getState()、setStat...
2019-04-23 08:30:46
189
原创 UML建模以及画图
随着业务的发展,以及项目的扩大,项目的拆分细化,项目之间的复杂度变高,这个时候光靠人脑是很难记住所有的东西的,为了能更快的了解整个的概括,需要一种图形化的方式展示出项目的整体结构,所以UML就是一种很好的方式。UML统一建模语言(Unified Modeling Language)是一种绘制软件蓝图的标准语言。...
2019-04-21 09:59:49
4373
原创 【Java并发】信号量闭锁栅栏以及其工具类
信号量,闭锁,栅栏都是java中锁的一个实现和ReentrantLock锁类似,只是有各自不同的特点。ReentrantLock是对唯一资源的访问进行并发的控制。一:信号量(Semaphore)信号量是对有限数量的资源访问进行并发控制,假若有n个资源,在某个时刻最多允许n个线程同时访问。信号量在Java中的具体实现是Semaphore....
2019-04-18 17:57:23
388
原创 【Java并发】CopyOnWriteArrayList写时复制容器
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。...
2019-04-17 13:53:23
328
原创 【深入理解Java虚拟机】字节码指令
指令:操作码(Opcode) + 操作数(Operands),由于Java虚拟机采用面向操作数栈而不是寄存器的架构,所以大多数的指令都不包含操作数,只有一个操作码...
2019-04-08 21:34:44
197
原创 【深入理解Java虚拟机】垃圾回收与内存分配策略
一:判断对象是否已死(需要回收)的方法(1):引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能被使用的。存在问题:很难解决对象之间相互引用的问题(2):可达性分析算法:GC Roots 的对象最为起始点,从这些节点开始向下搜索,搜索走过的路径称为引用链(Reference Chain),当一个对象...
2019-04-04 13:08:22
160
原创 【深入理解Java虚拟机】内存管理和对象访问
一:JVM内存区域划分(1)程序计数器(线程私有):类似于eclipse中断点程序(行号指示器),记录了程序下一步需要执行的字节码指令,分支,循环等分支。线程私有,每个线程有一个程序计数器程序计数器是为了多线程情况下,线程执行切换后,处理器回来原来线程能找到之前线程执行的位置若执行Java方法,计数器记录是是正在执行的虚拟机字节码指令的地址,若执行Native方法,这个计数器为空,此内存...
2019-04-02 14:10:56
253
原创 Netty网络编程九:Netty服务端源码监控
一:概述Netty为了向使用者屏蔽NIO通信的底层细节,在和用户交互的边界做了封装,目的就是为了减少开发者的开发工作量,降低开发难度。用户可以通过ServerBootstrap启动辅助类,方便的创建服务端。可以通过时序图了解下netty服务端运行流程:直接看源码走,查看运行流程:1、服务端创建以ServerBootstrap开始,往group方法里添加两个参数,跟踪源码发现NioEve...
2019-04-01 08:48:50
806
原创 Netty网络编程六:Netty序列化编解码以及Protobuf序列化工具的使用
一:概述在进行网络传输时,我们传输到网络上的数据,并不一定是字符串,而可能是一个对象,这时候我们就需要,将对象以有效的方式转为字节数组传输到网络中,然后收到数据的一方可以解析出有效的数据。例如在java中,我们需要传输对象,可以直接通过将ObjectOutputStream或ObjectInputStream直接作为可存储的字节数组传输到网络中。通过java这种序列化对象的方式,存在一些问题:...
2019-03-25 19:03:01
2457
原创 Netty网络编程五:Netty粘包拆包解码器源码分析与自定义解码器
Netty网络编程五:Netty粘包拆包解码器源码分析之自定义解码器一:概述由上一篇文章讲完了ByteToMessageDecoder,再来看其实现LineBasedFrameDecoder ,DelimiterBasedFrameDecoder,FixedLengthFrameDecoder发现只要实现decode()方法即可,并按照指定的分割条件进行字节流数据分割,然后将处理好的数据加入到...
2019-03-17 18:47:55
229
原创 Netty网络编程四:Netty粘包拆包解码器之ByteToMessageDecoder
一:ByteToMessageDecoder的作用ByteToMessageDecoder在Netty中主要是用来解决半包积累的问题,是一种解码器,LineBasedFrameDecoder ,DelimiterBasedFrameDecoder,FixedLengthFrameDecoder都是其的一种具体的实现。因为要想netty解决半包拆包问题,需要从认识ByteToMessageDeco...
2019-03-12 19:05:19
3888
原创 Netty网络编程三:Netty解决粘包和拆包
目录1.tcp粘包/拆包原因2.粘包解决策略3.具体实现思路4.netty提供的粘包解决方法一:tcp粘包/拆包原因我们都知道Netty是基于NIO的,nio进行客户端与服务端socket编程,在发送消息时,底层是基于TCP传输协议的,首先,TCP协议是基于字节流的,把发送或接受的数据看成一段无结构的字节流,没有边界。其次,在TCP的首部也没有表示数据长度的字段。因此当使用tcp传输...
2019-03-11 17:08:22
645
原创 Netty网络编程二:Netty概述以及入门案例
目录1、概述2、入门案例一:概述虽然原生的java给我们提供了非常强大NIO的功能,但是由于使用上的,众多网络编程上的问题,任然需要开发者自己开发维护,因为选择Netty这种基于原生NIO进行开发的框架来助于我们的开发。二:入门案例学任何框架都是从入门案例,netty也不例外,先搭建一个简单的服务端,客户端来理解Netty的便捷性。需求:客户端连接服务端后,给服务端发送一条消息,服...
2019-03-08 13:56:54
288
原创 Netty网络编程一:NIO
目录1 传统BIO socket通信2 NIO 编程一:传统socket通信在NIO编程没出来之前,java使用的socket编程时socket 服务端:public class OldSocketServer { private void start(int port) throws IOException { ServerSocket serverSo...
2019-03-05 16:16:52
268
原创 基于Netty写一个http协议的服务
第一步:引入netty的jar包,本文是使用的是netty-all-4.1.9.Final.jar第二步:创建netty服务import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;import org.slf4j.Logger;import org.springframework.beans.fact...
2018-02-08 10:31:22
470
原创 Redis与spring整合缓存的业务场景使用方法二(使用注解@Cacheable@CacheEvict)
一:配置appliction-redis.xml<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context
2017-05-08 09:29:45
1083
原创 Redis与spring整合缓存的业务场景使用方法一
需求:给商品的包装做缓存(该需求只为了测试缓存使用)1、pom.xml(版本已外部定义)2、spring-redis.xml的配置xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:uti
2017-05-05 10:16:02
1244
原创 Activiti工作流入门
一 : 安装Eclipse插件打开:Help ----> Install New Software ----> Add 输入Name: Activiti Designer Location: http://activiti.org/designer/update/ 输入完成后,单击OK按钮等待下载完成后安装即可二:设置eclipse activiti插件的画流程图选项
2017-02-18 19:24:34
707
原创 maven下axis2与spring的整合开发流程
第一步:pom.xml导入axis2的依赖 我用1.6.2版本的版本指定-->1.6.2 org.apache.axis2 axis2 ${axis2.version} org.apache.axis2 axis2-spring ${axis2.version} org.apache.
2017-01-11 14:42:21
16368
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人