- 浏览: 36620 次
- 性别:
- 来自: 杭州
最新评论
-
ykdsg:
我想问下rehash()方法中 // 将lastRun之后的整 ...
并发容器分析(五)--ConcurrentHashMap -
borland:
刚才测试了,性能比LinkedBlockingQueue好50 ...
并发容器分析(四)--ConcurrentLinkedQueue
文章列表
一、简介
ChannelPipeline是事件(event)的通道,它用于组织事件拦截器ChannelHandler。所以本质上,它只是ChannelHandler的一个链表。从I/O端获取的数据将以事件的方式通过ChannelPipeline,并被ChannelUpstreamHandler拦截,最终被程序的业务逻辑处理。要发送的数据通过pipeline被ChannelDowmstreamHandler拦截,并最终到达ChannelSink,由底层nio处理。
二、ChannelHandlerContext
ChannelHandlerContext是ChannelHa ...
netty代码分析(一)--总体设计
- 博客分类:
- JavaEE
一、简介
Netty3是一个轻量级的NIO框架,它的主要目标是实现底层nio接口的封装,分离IO传输与网络协议的设计,从而简化网络应用的实现。它大致的原理如下:
在用netty3框架实现一个应用服务器的时候,最主要的扩展点就是ChannelHandler,它类似于系统中的拦截器。系统中的数据传输全都采用异步的方式,当每一次底层出现数据到达/发送时,系统都会产生一个事件event,该event通过pipeline,并被其中的ChannelHandler截获,进行数据的解码并最终由业务逻辑处理。
ChannelPipeline是事件通行的管道,它用于组织和管理Ch ...
spring aop分析(三)
- 博客分类:
- JavaEE
四、方法调用
在JdkDynamicAopProxy类的invoke()方法中创建了一个ReflectiveMethodInvocation类,该方法将执行拦截器链和最终的方法调用:
public class ReflectiveMethodInvocation implements ProxyMethodInvocation, Cloneable {
public Object proceed() throws Throwable {
// 若拦截器执行完毕,则运行目标对象上的方法
if (this.currentInterceptorIndex == thi ...
spring aop分析(二)
- 博客分类:
- JavaEE
三、计算拦截器链
调用链图:
JdkDynamicAopProxy实现了InvocationHandler接口,当其创建的JDK Proxy上的某一个方法被调用时,将会被JdkDynamicAopProxy类中的invoke(..)方法拦截:
final class JdkDynamicAopProxy implements AopProxy, InvocationHandler, Serializable {
public Object invoke(Object proxy, Method method, Object[] args) throws Thr ...
spring aop分析(一)
- 博客分类:
- JavaEE
一、简介
Spring Aop模块采用了代理(Proxy)机制来实现AOP功能,在运行过程中aop框架大致可以分成三个阶段:创建代理、计算拦截器链、处理调用。
在“创建代理”阶段,Spring AOP可以根据目标类的实现或设置采用JDK ...
一、简介
ConcurrentHashMap是Map的一种并发实现,在该类中元素的read操作都是无锁了,而write操作需要被同步。这非常适合于读操作远大于写操作的情况。在实现过程中,ConcurrentHashMap将所有元素分成了若干个segment,每个segment是独立的,在一个segment上加锁并不影响其他segment的操作。segment本身是一个hashtable,对于一个加入ConcurrentHashMap的<key, value>对,key的hash值中的高位被用来索引segment,而低位用于segment中的索引。
二、segment实现
...
一、简介
ConcurrentLinkedQueue是一个无锁的queue实现,它采用了一种无锁算法(在API中有说明),相比于传统的同步的queue来说吞吐量可以大大提高,同时它也不同于BlockingQueue,并不单单提供阻塞操作。它主要的目的是通过采用无锁的算法,使得read/write操作均不需要对容器加锁,提高容器吞吐量
二、具体实现
查看相关的论文
一、简介
LinkedBlockingQueue是BlockingQueue的一种使用Link List的实现,它对头和尾(取和添加操作)采用两把不同的锁,相对于ArrayBlockingQueue提高了吞吐量。它也是一种阻塞型的容器,适合于实现“消费者生产者”模式。
二、具体实现
LinkedBlockingQueue底层的定义如下:
public class LinkedBlockingQueue<E> extends AbstractQueue<E>
implements BlockingQueue<E>, ja ...
一、简介
BlockingQueue接口定义了一种阻塞的FIFO queue,每一个BlockingQueue都有一个容量,让容量满时往BlockingQueue中添加数据时会造成阻塞,当容量为空时取元素操作会阻塞。ArrayBlockingQueue是对BlockingQueue的一个数组实现,它使用一把全局的锁并行对queue的读写操作,同时使用两个Condition阻塞容量为空时的取操作和容量满时的写操作。
二、具体实现
ArrayBlockingQueue底层定义如下:
public class ArrayBlockingQueue<E> ext ...
一、简介
JDK5中添加了新的concurrent包,其中包含了很多并发容器,这些容器针对多线程环境进行了优化,大大提高了容器类在并发环境下的执行效率。
CopyOnWriteArrayList类是一个线程安全的List接口的实现,在该类的内部进行元素的写操作时,底层的数组将被完整的复制,这对于读操作远远多于写操作的应用非常适合。在CopyOnWriteArrayList上进行操作时,读操作不需要加锁,而写操作类实现中对其进行了加锁。
二、具体实现
CopyOnWriteArrayList底层的定义如下:
public class CopyOnWriteArra ...
一、简介
Guice的运行可以分为三个阶段:install阶段、create
injector阶段和运行时阶段。install阶段主要完成加载Module中定义的绑定关系;create
injector阶段通过分析install中获得的绑定信息创建一个Injector实例;运行时阶段根据绑定信息响应用户请求。
在install过程结束之后,Module中自定义的绑定信息都由BindingBuilderImpl来表示存储在BinderImpl的bindingBuilders属性中。在接下来的create injector过程中,Guice将会分析每一个BindingBuilderI ...
- 2008-12-29 23:51
- 浏览 2859
- 评论(0)
一、简介
Guice中通过自定义Module实现中的bind、to等语法实现绑定信息的注册,在绑定中存在着一种特殊的情形:范型绑定,如下:
public class ListUser {
@Inject @Named("list") List<String> strings;
@Inject @Named("list") List<Integer> integers;
}
Java的范型实现采用了擦除的方式 ,为此无法在运行时区分List<String>和List<Intege ...
- 2008-12-28 16:52
- 浏览 5012
- 评论(0)
5.3、事务属性配置
spring中对于事务属性的配置可以有两种办法,一种是在<tx:advice/>的<tx:attributes />下的<tx:method />上配置属性,以指定对应的事务属性。
<tx:method />的有关设置
属性
默认值
描述
name ...
- 2008-12-15 10:51
- 浏览 1623
- 评论(0)