posts - 262,  comments - 221,  trackbacks - 0
     摘要: Apache commons IO包中提供了一个可以遍历目录下资源的DirectoryWalker,还有很多的IOFileFilter用于过滤文件目录。下面的例子分别演示了这个功能。

这两个搜索类都是以内部类的方式嵌入客户端的,客户端接收客户的参数,然后通过一个后台线程来进行搜索,等待子线程完成搜索后(join方法),再打印搜索结果。

注意这个过程是可以被cancel的。cancel主要有2种情况。外部cancel:外部线程通过调用内部类的cancel()方法。内部cancel:在handleDirectory、handleFile中主动抛出CancelException。

walk方法在每次执行前、后都会检查当前是否有cancel指令发出(checkIfCancelled ---> handleIsCancelled),如果有那么默认立刻抛出CancelException,然后调用handleCancelled方法。  阅读全文
posted @ 2010-03-31 23:45 Paul Lin 阅读(2530) | 评论 (1)编辑 收藏

从 同一个源文件(15M左右)使用不同的方式读入,一种是读入后构造成一个String,另外一个是读入后构造成一个List。然后再调用 writeLines(File, String)和writeLines(File, Collection)写入。下面是测试比较的结果:

Read and write by string format
  File sizes(bytes): 15661680
  Content read(bytes): 15661680
  Time costing(ms) on reading: 2047
  Time costing(ms) on writing: 1016


Read and write by collection format
  File sizes(bytes): 15661680
  File read(lines): 1782615
  Time costing(ms) on reading: 2047
  Time costing(ms) on writing: 533437


效率相差之多! 我的测试环境如下:

OS:Win XP SP4
CPU:Intel Core(TM) 2 Duo CPU
内存:800M(虚拟机分配)
JDK:JDK 5.0 (JVM内存分配:-Xms64m -Xmx512m)
测试文件:15.295M (是一个IP地址文件,总共1782615行)

在读方面时间居然相当(这里面应该有操作系统层面的缓冲作用,我单独地测试时第2个方式总比第一个慢1/3左右)。而在写方面性能简直是天壤之别啊:533437/1016 ≈525倍。

虽然我这个测试还是不严谨的,但是从方法实现过程和原理来看,两者性能差异存在必然的因素:

①以Collection方式去构造的,在读取的过程中生成多个小String,而生成String是一项耗时的工作
②以Collection方式去写的,首先要迭代这个Collection,然后每次调用Collection中的元素的toString()方法,造成多次的堆栈操作



posted @ 2010-03-30 00:19 Paul Lin 阅读(5967) | 评论 (0)编辑 收藏
     摘要: 最近在对之前做过的一个项目进行二期修改。鉴于之前典型的贫血结构,以及Controller--->Service--->DAO模式让代码压力都集中在service层的情况。在参考了Banq写的几篇对象职责和Domain Event的文章后,我也试着捣鼓了一下新的分层模式。贴出来和大家讨论,欢迎拍砖!  阅读全文
posted @ 2010-03-23 17:05 Paul Lin 阅读(1561) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2010-03-19 23:11 Paul Lin 阅读(550) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2010-03-19 22:21 Paul Lin 阅读(1502) | 评论 (0)编辑 收藏
     摘要: Spring对事务传播的定义和事务操作性能优化  阅读全文
posted @ 2010-03-15 11:09 Paul Lin 阅读(2584) | 评论 (0)编辑 收藏
     摘要: 乐观锁定采用的版本策略实际上和SVN的版本冲突解决方案是同样的:采用其它人的(先提交的)、采用自己的(后提交的)、合并他人和自己的(合并冲突更新)
悲观锁定(Pessimistic locking)会采用基于数据库提供的锁机制来进行锁定。它会在物理层对行甚至表进行锁定。使得应用的并发性变差。  阅读全文
posted @ 2010-03-15 11:07 Paul Lin 阅读(1470) | 评论 (0)编辑 收藏
     摘要: READ COMMITITED:不允许读取未提交的数据,但可以读取已提交的数据。所以可能出现不可重复读、和幻像读(读的过程依然可以被修改、增加、删除)


REPEATABLE READ:通过行锁定,在读的数据不允许其它进程修改。确保已读取的数据不被修改、删除(不可重复读)但无法阻止其它进程写入新数据,所以不能确保读取到新的数据(幻像读)

SERIALIZABLE:通过表锁定,彻底禁止读取期间其它进程的修改、删除(屏蔽不可重复读)和增加(屏蔽幻像读)

但是不管是那种隔离级别,对第一类丢失更新都是不能接收的  阅读全文
posted @ 2010-03-15 11:04 Paul Lin 阅读(1046) | 评论 (0)编辑 收藏
     摘要: 一级、二级缓存使用的key均为po的主键ID,value即为po实例对象,查询缓存使用的则为查询的条件(hql转化而成的sql语句)、查询的参数、查询的页数,value有两种情况,如果采用的是select po.property这样的方式那么value为整个结果集,如采用的是from这样的方式那么value为获取的结果集中各po对象的主键ID,这样的作用很明显,节省内存。  阅读全文
posted @ 2010-03-15 11:00 Paul Lin 阅读(4061) | 评论 (0)编辑 收藏
     摘要: 关于Memcached入门知识点  阅读全文
posted @ 2010-03-15 10:57 Paul Lin 阅读(2242) | 评论 (0)编辑 收藏
仅列出标题
共26页: First 上一页 2 3 4 5 6 7 8 9 10 下一页 Last 
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(21)

随笔分类

随笔档案

BlogJava热点博客

好友博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜