- 浏览: 538995 次
- 性别:
- 来自: 杭州
最新评论
-
c__海棠依旧:
很强,对于我这个新手很容易理解,准们登录来给你点赞的!
BeanFactory和FactoryBean -
hudazheng:
很清晰!
X86、X64和X86_64区别 -
hugh.wang:
...
BeanFactory和FactoryBean -
CB00J:
...
Executor框架和线程池 -
Arbow:
请教一个问题。现在互联网业务的数据库通常用分片方式来连接一组数 ...
BoneCP源码——概述
文章列表
0、AOP实现原理
面向方面编程(Aspect Oriented Programming,简称AOP)是一种声明式编程(Declarative Programming)。AOP的实现原理可以看作是Proxy/Decorator设计模式的泛化,如下为Proxy模式的简单例子:
Proxy {
innerObject; // 真正的对象
f1() {
// 做一些额外的事情
innerObject.f1(); // 调用真正的对象的对应方法
// 做一些额外的事情
}
}
1、使用代理实 ...
BoneCP源码——BoneCP中使用的队列
- 博客分类:
- 数据库连接池
BoneCP中用于保存连接对象的队列为TransferQueue,该接口为jsr166y中的接口,继承BlockingQueue:
TransferQueue<ConnectionHandle> connectionHandles;
public interface TransferQueue<E> extends BlockingQueue<E> {
}
if (config.getMaxConnectionsPerPartition() == config.getMinConnectionsPerPartition()){
// ...
BoneCP主要使用了下面几种第三方包:
1、Google Guava library The Guava project contains several of Google's core libraries that we rely on in our Java-based projects: collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, ...
1、asyncExecutor 可缓存线程池,用于异步的创建一个Connection对象,返回Future类型对象 /** Executor service for obtaining a connection in an asynchronous fashion. */
private ExecutorService asyncExecutor;
/**
* Constructor.
* @param config Configuration for pool
* @throws SQLException on error
*/
public BoneC ...
BoneCP官网上有其配置的使用文档,看最基本的Manual configuration:
Class.forName("org.hsqldb.jdbcDriver"); // load the DB driver
BoneCPConfig config = new BoneCPConfig(); // create a new configuration object
config.setJdbcUrl("jdbc:hsqldb:mem:test"); // set the JDBC url
config.setUsern ...
BoneCP源码——概述
- 博客分类:
- 数据库连接池
BoneCP是一个开源的Java数据库连接池,其内部使用了JDK1.5的并发包java.util.concurrent来保证同步,而且采用分段思想,避免单点加锁的竞争(ConcurrentHashMap也是使用这种思想来实现的),具有以下特点(官网):
Highly scalable, fast connection pool
Callback (hook interceptor) mechanisms on a change of connection state.
Partitioning capability to increase performance
Allow ...
一般情况下,在使用开发基于数据库的WEB程序时,传统的模式基本是按以下步骤: 1. 建立数据库连接 2. 进行SQL操作,取出数据 3. 断开数据库连接 使用这种模式开发,存在很多问题。首先,我们要为每一次WEB请求(例如察看某一篇文章的内容)建立一次数据库连接,对于一次或几次操作来讲,或许你觉 察不到系统的开销,但是,对于WEB程序来讲,即使在某一较短的时间段内,其操作请求数也远远不是一两次,而是数十上百次(想想全世界的网友都有可能在您 的网页上查找资料),在这种情况下,系统开销是相当大的。事实上,在一个基于数据库的WEB系统中,建立数据库连接的操作将是系统中代价最大的操 ...
思路:把所有数据分组,每组使用一个线程去计算结果,计算完后再把结果汇总
具体实现如下:
1、用数据模拟文本里的数据
2、声明一个线程池和实现一个可返回结果的Callable接口
3、把果返回结果Future放到CopyOnWriteArrayList中用于结果集计算
4、此算法的缺点有待改进的地方是结果汇总时是被动去检测,而不是某个结果计算完成后主动去汇总,既然是分段计算,如果数据量足够大时,应该采用递归去实现分段汇总会更好
/**
* Huisou.com Inc.
* Copyright (c) 2011-2012 All Rights Reserved.
*/
...
Java垃圾回收:GC在什么时候对什么做了什么
- 博客分类:
- JVM
GC在什么时候对什么做了什么?
要回答这个问题,先了解下GC的发展史、jvm运行时数据区的划分、jvm内存分配策略、jvm垃圾收集算法等知识。
先说下jvm运行时数据的划分,粗暴的分可以分为堆区(Heap)和栈区(Stack),但jvm的分法实际上比这复杂得多,大概分为下面几块:
1、程序计数器(Program Conuter Register)
程序计数器是一块较小的内存空间,它是当前线程执行字节码的行号指示器,字节码解释工作器就是通过改变这个计数器的值来选取下一条需要执行的指令。它是线程私有的内存,也 ...
1、jdk工具在linux中的安装,有些系统只安装了jre,并没装JDK,所以就没有jvm工具,一般安装目录在/usr/java或/usr/local/java目录下,可以使用下面方法查看:
[root@b2b ~]# whereis java
java: /usr/bin/java
[root@b2b ~]# ls -l /usr/bin/java
lrwxrwxrwx 1 root root 26 Apr 25 2012 /usr/bin/java -> /usr/java/default/bin/java
[root@b2b ~]# ls -l /usr/java/d ...
这是有一次去面试被问到的,当时只知道用synchronized来保证同步,但面试官说除了此方式的其它实现,现在写下它的各种实现:
1、JDK1.5之前的内置锁synchronized实现
模仿JDK1.5之前同步集合SynchronizedList的实现,内部使用synchronized对一个对一个List的封装,如下代码:
/**
* @description
*
* @author chenzehe
* @email hljuczh@163.com
* @create 2013-2-22 下午05:03:43
*/
public class SyncL ...
1、队列Queue介绍
Queue是JDK1.5引入的接口,继承Collection接口,是Collection框架的新成员,是种先进先出(FIFO)的队列。
public interface Queue<E> extends Collection<E>{
boolean add(E e);
boolean offer(E e);
E remove();
E poll();
E element();
E peek();
}
除了基本的Collection操作外,队列还提供其他的插入、提取和检查操作。 ...
ConcurrentHashMap是JDK1.5并发包中提供的线程安全的HashMap的实现,其包结构关系如下:
public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
implements ConcurrentMap<K, V>, Serializable {
}
public abstract class AbstractMap<K,V> implements Map<K,V> {
}
public interface Concur ...
1、Java在JDK1.5之前基本上对所有集合都实现了线程同步版本synchronized*,用集合工具类Collections即可得到,如下都为Collections中的方法:
static <T> Collections<T>
synchronizedCollection(Collection<T> c)
返回指定 collection 支持的同步(线程安全的)collection。
static <T> List<T>
synchronizedList(List<T> li ...
1、HashMap
HashMap是Map接口最常见的实现,HashMap是非线程安全的,其内部实现是一种基于一个数组和链表的结合体,如下table为HashMap中存储数据的字段:
transient Entry[] table;
static class Entry<K,V> implements Map.Entry<K,V> {
final K key;
V value;
Entry<K,V> next;
final int hash;
..... ...