- 博客(21)
- 资源 (3)
- 收藏
- 关注
原创 JAVA NIO之内存映射文件与DirectMemory原理分析
参考原文:http://www.360doc.com/content/13/0502/23/7669533_282552666.shtml JAVA类库中的NIO包相对于IO 包来说有一个新功能是内存映射文件,日常编程中并不是经常用到,但是在处理大文件时是比较理想的提高效率的手段。 在传统的文件IO操作中,我们都是调用操作系统提供的底层标准IO系统调...
2015-04-16 21:26:27
1088
原创 java中对象的equals()方法和hashCode()方法
关于“==”如果是原始类型,就是直接比较他们的值;如果是引用类型,比较的就是引用的值。引用的值就是指对象的地址。也就是两个引用指向同一个对象,那么==比较返回true,否则false。这里需要说明的一个问题是,关于Integer类中一个看起来奇怪的现象。看int的包装类型Integer类: Integer a = 20; Integer b ...
2015-04-15 23:44:57
175
原创 DbUtils源码分析系列(三)
今天分析一下DbUtils类。类图如下: 从类图中很容易看出DbUtils类提供了一些静态工具方法,方便JDBC操作。根据方法名可以明显看出方法的作用。 这里值得分析的方法是loadDriver方法。根据驱动类名,使用DbUtils的类加载器加载驱动,并返回加载是否成功标志。 /** * Loads and registers a database driver class.
2015-04-12 11:31:49
620
原创 DbUtils源码分析系列(二)
今天分析一下QueryRunner这个DbUtils核心类,它 利用可插拨的策略执行SQL查询来处理ResultSets。QueryRunner类图如下所示: 从类图中我们可以看出它继承AbstractQueryRunner。 QueryRunner构造器有多个重载方法:public AbstractQueryRunner() { ds = null; } /**
2015-04-12 08:12:02
1000
原创 DbUtils源码分析系列(一)
DbUtils源码结构DbUtils当前版本是1.6, 源码下载地址:http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi 下面简单描述一下每个包信息org.apache.commons.dbutils.handlers 这个包是org.apache.commons.dbutils.ResultSetHan
2015-04-11 19:34:38
2898
翻译 Commons DbUtils综述
JDBC功能组件DbUtils库是一组类,旨在简化使用JDBC。JDBC资源清理代码是平凡的,容易出错的工作,这些类抽象出所有清理任务的代码,使用JDBC你首先只需要做的是:查询和更新数据。没有资源泄漏的可能性。正确的JDBC代码并不难但耗时且乏味。这常常会导致连接泄漏,可能很难追踪。更清洁、更清晰的持久性代码。代码的数量需要在数据库中保存数据大大减少。剩下的代码清晰地表达你的意图,没有因为资源
2015-04-11 17:45:38
447
翻译 ZooKeeper基础
API综述Znode可以包含或不包含数据。假如一个Znode节点包含数据,那么数据是按照字节数组存储的。字节数组的详细格式特定于具体的应用,而且ZooKeeper不直接提供对它的解析支持。Protocol Buffers, Thrift, Avro, MessagePack等序列化包或许方便处理存储在znodes中的数据格式,但有时字符串编码如UTF-8,ASCII足够使用了。ZooKeeper A
2015-04-06 22:25:05
463
原创 为什么wait 和notifyAll 必须要使用synchronized?
为什么wait 和notifyAll(notify) 必须要使用synchronized?synchronized(object){ object.wait();} synchronized(this){ this.wait();} synchronized fun(){ this.wait();} 如...
2014-09-28 17:21:53
650
原创 使用两个容量为1的阻塞队列实现同步通知的功能
[code="java"]package concurrency;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;public class BlockingQueueCommunication { public static void main(...
2014-09-13 17:24:57
206
原创 使用Condition实现有界缓存
[code="java"]import java.util.concurrent.locks.*;import net.jcip.annotations.*;/** * ConditionBoundedBuffer * * Bounded buffer using explicit condition variables * * @aut...
2014-09-13 17:08:25
168
原创 使用synchronized和Condition三线程轮流打印A,B,C示例
ReentrantLock并不是一种替代内置加锁的方法,而是当内置加锁机制不适用时,作为一种可选择的高级功能。当需要一些高级功能时才使用ReentrantLock,包括定时的锁等待,可中断的锁等待,公平性,锁绑定多个条件以及实现非块结构的加锁。否则,还是应该优先使用内置锁synchronized。synchronized是JVM的内置特性,可以进行一些优化。比如对线程封闭锁对象的锁消除优化...
2014-09-12 09:03:51
259
原创 CopyOnWriteArrayList使用
除了加锁外,其实还有一种方式可以防止并发修改异常,这就是读写分离技术(不是数据库上的)。先回顾一下一个常识:1、JAVA中“=”操作只是将引用和某个对象关联,假如同时有一个线程将引用指向另外一个对象,一个线程获取这个引用指向的对象,那么他们之间不会发生ConcurrentModificationException,他们是在虚拟机层面阻塞的,而且速度非常快,几乎不需要CP...
2014-06-11 09:51:33
146
原创 Java中getResourceAsStream的用法
1. Class.getResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。2. Class.getClassLoader.getResourceAsStream(String path) :默认则是...
2014-06-10 15:20:34
103
原创 BitSet与EnumSet的基本使用
如果要高效率的存贮大量开关信息,BitSet是很好的选择,不过它的效率是针对空间而言的;如果需要高效的访问时间,BitSet比本地数组稍慢一些。BitSet的最小容量是64位,如果存储的内容比较小,如8位。那么BitSet就浪费了一些空间。BitSet会随着元素的加入而扩充其容量。 以下示范BitSet是如何工作的。[code="java"]package container...
2014-03-08 20:52:47
301
原创 枚举类型进阶2:EnumMap演示命令设计模式
EnumMap是一种特殊的Map,它要求其中的键必须来自于一个enum。枚举映射在内部表示为数组。此表示形式非常紧凑且高效。枚举映射根据其键的自然顺序来维护(该顺序是声明枚举常量的顺序)。enum的每个实例作为一个键总是存在的,但是如果你没有为这个建调用put方法来存入相应的值,其对应值就是空。EnumMap 是不同步的。如果多个线程同时访问一个枚举映射,并且至少有一个线程修改该映射,则此...
2014-03-06 12:15:40
189
原创 枚举类型进阶1:使用接口组织枚举
对于enum而言,实现接口是其实现子类化的唯一办法。在一个接口的内部,创建实现该接口的枚举,以此将元素进行分组,可以达到将枚举元素分类组织的目的。如下示例,用enum来表示不同类别的食物,但同时希望每个enum元素仍然保持Food类型。 [code="java"]package enumerated.menu;import net.mindview.util.*;...
2014-03-06 11:38:53
462
原创 java线程本地存储使用
防止任务在共享资源上发生冲突的一种方式是根除对变量的共享。线程本地存储可以为使用相同变量的每个不同线程都创建不同存储。ThreadLocal该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private...
2014-03-06 10:21:22
272
原创 使用ReentrantReadWriteLock实现一个简单的缓存Demo
[b]重入[/b] 此锁允许 reader 和 writer 按照 ReentrantLock 的样式重新获取读取锁或写入锁。在写入线程保持的所有写入锁都已经释放后,才允许重入 reader 使用它们。 此外,writer 可以获取读取锁,但反过来则不成立。在其他应用程序中,当在调用或回调那些在读取锁状态下执行读取操作的方法期间保持写入锁时,重入很有用。如果 reader 试图...
2014-03-05 20:20:07
357
原创 Java读写锁基本使用
ReadWriteLock使得你可以同时具有多个读取者,只要他们都不试图写入即可。如果写锁被其他任务持有,那么任何读取者均不能访问,直至这个写锁被释放为止。 ReadWriteLock能否提高性能是不确定的,取决于数据读取与修改频率相比较的结果,读取和写入操作的时间,竞争的线程数以及是否是多处理器等等。 下面展示了ReadWriteLock最基本的用法。[cod...
2014-03-05 17:14:26
319
zdh6667402zk
2011-05-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人