- 浏览: 17350 次
- 性别:
- 来自: 杭州
最新评论
文章列表
netty基于事件的过程流转
- 博客分类:
- netty
本为分析netty源码中的过程流转实现
netty中的处理器的流转体现在DefaultChannelPipeline类中,在添加处理器时一般调用addLast(String, ChannelHandler),下面来看看这个方法
public synchronized void addLast(String name, ChannelHandler handler) {
if (name2ctx.isEmpty()) {
init(name, handler);
} else {
checkDup ...
原子类
- 博客分类:
- Concurrent
本文主要介绍jdk中的原子类、ABA问题以及多个变量之间的安全访问。
原子类中核心的一个语法就是CAS操作,而这个操作封装在Unsafe类中,典型的应用如下代码
// setup to use Unsafe.compareAndSwapInt for updates
private static final Unsafe unsafe = Unsafe.getUnsafe();
private static final long valueOffset;
static {
try {
valueOffse ...
学习了一下netty的源码,做点记录
代码分析可以看看淘宝的文章
http://rdc.taobao.com/team/jm/archives/423
附上两个断点列表,以官网中的echo的例子
netty-1.bkpt主要学习netty的核心流程:包括服务端boss的绑定监视,worker的轮询;客户端的连接,boss的轮询(默认只有一个boss),worker的轮询;主要描boss怎么向worker注册任务,服务端和客户端怎么发送信息(这个过程netty还是依赖底层java api实现的)。
netty-2.bkpt主要学习netty的事件流转模型:描述管道中处理器上下 ...
netty中的概念理解
- 博客分类:
- netty
本文的主要内容是对netty框架中的Channel、ChannelEvent、ChannelFuture、ChannelHandler、ChannelPipeline、ChannelSink、SelectionKey、Selector对象进行一个概念的理解,信息都来自源码中的英文解释,算一个翻译文档。
先来说说channel
channel是一个网络套接字的纽带或者说是一个组件,它可以有这样的i/o操作:读写、连接以及绑定。以下是它的一些特点:
1、netty中全部的i/o操作都是异步的,这就意味着任何i/o操作将会立即返回而不保证操作是否完成,返回的是C ...
SSL双向认证java实现 :
http://www.blogjava.net/stone2083/archive/2007/12/20/169015.html;(评论也很重要)
为高级 JSSE 开发人员定制 SSL:
http://www.ibm.com/developerworks/cn/java/j-customssl/;
详解公钥、私钥、数字证书的概念 :
http://pepa.iteye.com/blog/250991;
SSL协议与数字证书原理:
http://blog.csdn.net/xinew/article/deta ...
本文的主要内容是对jdk并发包中ArrayBlockingQueue、LinkedBlockingQueue、ConcurrentLinkedQueue类的代码解析,主要对比他们的不同。
前面两个类都是生产者消费者模型的实现,性能都不错,这毕竟都是大师的杰作。先来认识下ArrayBlockingQu ...
本文的主要内容是认识CountDownLatch、Semaphore、FutureTask的源码,这三个类在AQS中都用的是共享模式的,而且是可中断的,不同的是各自的请求锁和释放锁的操作,先说他们的不同点,在来说相同点。
首先看看CountDownLatch(闭锁),这个类在构建的时候初始一个阀值N,每调用一次countDown()后,N将减一直到为0时,线程才可以通过,下面来看看请求锁的代码
public int tryAcquireShared(int acquires) {
return getState() == 0? 1 : -1;
...
本文主要内容是对并发包中的读写锁的认识,主要解释读写锁的请求过程,锁降级的实现以及锁升级的不可能性。
首先来了解一些常量和简单方法,贴下代码
static final int SHARED_SHIFT = 16;
static final int SHARED_UNIT = (1 << SHARED_SHIFT);
static final int MAX_COUNT = (1 << SHARED_SHIFT) - 1;
static final int EXCLUSIVE_MASK = (1 << SHARED_S ...
理解ReentrantLock
- 博客分类:
- Concurrent
本文的主要内容是理解ReentrantLock源码。
先来看一段代码
public Object take() throws InterruptedException {
lock.lock();
try {
while (count == 0){
System.out.println("empty,wait with puting....");
notEmpty.await();
}
// TimeUnit.SECONDS.sleep(1);
Object x = items[takeptr];
if (++tak ...
JS中offsetTop、clientTop、scrollTop、offsetTop各属性介绍 这里是javascript中制作滚动代码的常用属性
页可见区域宽: document.body.clientWidth;
网页可见区域高: document.body.clientHeight;
网页可见区域宽: document.body.offsetWidth (包括边线的宽);
网页可见区域高: document.body.offsetHeight (包括边线的宽);
网页正文全文宽: document.body.scrollWidth;
网页正文全文高: document.body.sc ...
hibernate缓存知识
- 博客分类:
- hibernate
hibernate缓存知识备份一下:
1、http://baike.baidu.com/view/2273788.htm;
2、http://www.iteye.com/topic/249465;
hibernate英文文档也不错
hibernate乐观锁和悲观锁,收藏下:
1、http://www.blogjava.net/baoyaer/articles/203445.html
部署描述符的配置详解,收藏下:
http://www.cnblogs.com/konbluesky/articles/1925295.html
我们知道,hibernate的tool工具中有个包hbm2ddl可以通过hibernate的映射文对数据库进行ddl操作,而在配置文件中加入<property name="hbm2ddl.auto">update</property>,就可以根据映射文件进行ddl操作了。那我们要在运行创建表,或修改表的字段,那我们可以先通过 DOM修改配置文件来间接修改数据库那要创建数据库表的话,只要创建了新的映射文件,并通过映射文件进行插入操作,就可以创建表了那我们要修改数据库表的字段怎么办呢?hibernate3.0中给我们提供了动态组件的功能,这种映射的优点是通 ...
- 2008-04-27 12:55
- 浏览 524
- 评论(0)