- 浏览: 126705 次
- 性别:
- 来自: 杭州
最新评论
-
编程之美_bupt:
左右旋好像正好反了,还有楼主: private int cal ...
AVLTree的实现 -
xugangqiang:
对contextClassaLoader, 能谈的更深一点吗? ...
Thread类为什么有contextClassLoader -
oyakamozo:
你说的情况并没有发生。
Java的死锁分析
文章列表
NIO的通用模型是使用一个Selector管理所有的SocketChannel,包括ServerSocketChannel。但是,诸多开源工程中,使用模式会有些不同,下面描述了几种开源软件在某些组件中如何使用Selector的。
1. 多个Selector管理客户端的读写
Voldemort使用NIO有些不同。ServerSocketChannel是阻塞模式,但是,与客户端通信的SocketChannel却是非阻塞模式。ServerSocketChannel并没有被Selector管理,而是在一个单独的线程中不断监听客户端的请求,建立SocketChannel。
...
RoutedStore是Voldemort客户端的一个重要组件,他的职责是将数据操作路由到不同的节点上。RoutedStore内部维护了与节点通信的客户端列表,这些客户端是Store的实现类,可以是SocketStore或HttpStore。对于每一个节点,RoutedStore会建 ...
ThreadLocal是JDK提供的一个工具类,利用ThreadLocal,应用可以将某个值绑定到当前处理的线程上,在线程的后续处理过程中,该值可以很方便地被获取并修改。这样可以在一定程度上避免该值在方法调用中的传递。可以利用ThreadLocal保存线程执行的上下文。webwork的ActionContext就利用了ThreadLocal来保存当前Action执行的一些环境变量,所以,可以很方便地调用ActionContext.get()来得到一个与当前线程关联的ActionContext对象。
源码之前了无秘密。下面是ThreadLocal的get方法:
public ...
StoreClient是一个接口,定义了get, put, delete等操作。Voldemort使用了工厂方法来得到具体的StoreClient,StoreClientFactory是定义了工厂方法的接口。HttpStoreClientFactory, SocketStoreClientFactory, CachingStoreClientFactory, MockStoreClientFactory, StaticStoreClientFactory实现了StoreClientFactory接口。
DefaultStoreClient是StoreClient的实现类。De ...
1. 忽略异常,往上抛
一般在打开Socket时出现的异常应该往上抛,不应该吃掉异常,致使上层的调用者无法感知这些异常。我们在Hadoop的RPC的Server初始化中可以看到这一点。如果在打开Socket的时候抛出异常,该异常一直往上抛,从而到达最顶端,即Namenode的初始化,从而导致Namenode初始化失败。因为RPC中Server的Socket是一个必不可少的组件,如果该组件初始化失败,会使服务不完整。所以,需要让上层调用者知道这个失败。
一般最底层处理IO的异常应该往上抛。例如在Hadoop的RPC的Server中的channelWrite(Writea ...
jetty的NIO如何处理IO
Listener实例化一个(或多个)Selector。Listener不断accept新的socket。每接受一个socket,生成对应的SelectableEndPoint(该SelectableEndPoint继承了ChannelEndPoint,内部维护了与客户端通信的SocketChannel。实现了Runnable接口。),调用该endpoint的dispatch方法。如果有空闲线程,会得到一个线程处理这个请求,否则的话,将该endpoint放入到队列。
线程池里的线程数目是有上限的。每一个线程处理一个请求。如果处理请求的线程被阻塞 ...
Hadoop的RPC如何处理IO
Hadoop在RPC的Server端使用了NIO的方式来处理客户端的请求。
Server端没有线程池,Listener类会打开一个线程,该类拥有一个Selector,该Selector负责接收链接,处理链接的输入流。一旦一个客户端链接被 ...
-- doMiniBatchPut(BatchOperationInProgress)
实例化一个WALEdit
如果CoprocessorHost不为空,对每一个Put操作调用CoprocessorHost的prePut方法,如果该方法返回true,设置这次Put操作的返回状态为
SUCCESS。(为什么要这样做?Coprocesso ...
import java.util.HashMap;
import java.util.Map;
/**
* The simple implementation of B+-Tree, reference http://en.wikipedia.org/wiki/B%2B_tree
*
* @author bo.fangbo
*
* @param <T>
* @param <V>
*/
public class BPlusTree <T extends Comparable<T>, V> {
...
-module(my_array).
-export([sum/1, print/1, average/1, reverse/1, indexOf/2, sub/3, max/1, bubble_sort/1, quick_sort/1, insert_sort/1]).
sum([H|T]) -> H + sum(T);
sum([]) -> 0.
print([H|T]) -> io:format("~w~n",[H]),
print(T);
print([]) -> io:format("end~n") ...
JDK7提供了fork-join框架,用该框架写了一个快速排序的实现。
public class QuickSort<T extends Comparable> extends RecursiveAction{
private T[] array;
/**
* start from 0
*/
private int start;
/**
* end of the array,max value is array.length-1
*/
private int end;
public Quick ...
引言
很多应用都需要对传入的数据进行验证,web应用对这种需要更为强烈。提高验证代码的内聚性和高可重用性是一个比较重要的话题。本文提出了一种利用Annotation机制对Java对象的属性进行合法性验证的新方法。
设计目标
如果有大量的属性需要对其合法性进行验证,不可能进行硬编码,同时,业务代码也不应该感知这种验证的存在。但是需要有一个接口供业务代码设置验证的逻辑。并且,某个验证逻辑可以重用到多处变量。还需要达到验证逻辑的集中,接口清晰,便于后续的维护和添加。
设计策略
利用Annotation,可以设置java类的某个实例变量多个验证逻辑,通 ...
摘要
由于webservice必须要部署到运行飞天的linux环境上,这个给开发带来了诸多不便,即使修改很少的一部分都要重新编译发布整个工程,并且每次上传文件还要打开一个ssh的上传文件的窗口,这些操作耗费了大量的 ...
1.在所有机器上建立相同目录:比如/home/bofang/hadoop,然后把hadoop的包解压到该目录下,最终的目录结构为:/home/bofang/hadoop/hadoop-0.20.2/bin,设/home/bofang/hadoop/hadoop-0.20.2为HADOOP_HOME
2.修改所有机器上的HADOOP_HOME/conf/hadoop-env.sh,指定JAVA_HOME
3.选择一台机器作为master,设ip为:IP_MASTER(192.168.1.10).(虚拟步骤)。
4.配置所有机器的/etc/hosts文件,将集群内的所有的机器的ip ...