随笔分类 -  Java

新写了一个Java并发程序设计教程
摘要:新写了一个Java并发程序设计教程, 用于公司内部培训的,和2007年写的那个相比,内容更翔实一些。 内容列表 1、使用线程的经验:设置名称、响应中断、使用ThreadLocal 2、Executor :ExecutorService和Future ☆ ☆ ☆ 3、阻塞队列 : put和take、offer和poll、drainTo 4、线程间的协调手段:lock、condition、 wait、notify、notifyAll ☆ ☆ ☆ 5、Lock-free: atomic、concurrentMap.putIfAbsent、CopyOnWriteArrayList ☆ ☆ ☆ 6、关于锁使用的经验介绍 7、并发流程控制手段:CountDownlatch、Barrier 8、定时器: ScheduledExecutorService、大规模定时器TimerWheel 9、并发三大定律:Amdahl、Gustafson、 Sun-Ni 10、神人和图书 11、业界发展情况: GPGPU、OpenCL 12、复习题 阅读全文

posted @ 2010-07-29 18:34 温少 阅读(9302) 评论(15) 推荐(1) 编辑

Google云计算体验感受
摘要:Google云计算AppEngine Java版刚刚推出来的时候,我就申请了该服务。该服务的申请需要提供手机号码验证,GOOGLE很牛B,能够发送全球的手机短信。申请的帐号放了很久,前段时间学习OpenID,需要作一个范例,于是就在Google AppEngine上作,作的过程发现其不能使用线程,导致HttpClient组件无法工作,于是我修改了OpenID4Java的实现,全部使用URLConn... 阅读全文

posted @ 2009-09-27 20:28 温少 阅读(2063) 评论(0) 推荐(0) 编辑

FileIterator
摘要:我们在开发中,经常需要遍历一个目录下的所有文件,常用的办法就是使用一个函数递归遍历是常用的办法。但是递归函数的缺点就是扩展不方便,当然你对这个函数加入一个参数FileHandler,这样扩展性稍好一些,但是仍然不够好,比如说,不能根据遍历的需要中途停止遍历,加入Filter等等。我实现了一个FileIterator,使得遍历一个目录下的文件如何遍历一个集合中的元素一般操作。 阅读全文

posted @ 2008-06-05 07:56 温少 阅读(2586) 评论(1) 推荐(0) 编辑

使用JSON替代XML
摘要:在新项目中,除了一些框架所依赖的配置文件使用XML外,基本没有使用XML。JSON基本替代了原来XML在程序内的位置。在以前,我们不愿意使用一种私有的格式,于是选择了XML。选择XML的理由,可能是大家都用它,所以我们也用它。XML是一种很好的技术,但是目前的情况来看,XML被滥用了,SOAP是XML被滥用的一种典型,程序内部的表示使用XML也是滥用的一种典型。看到的一种情况,一个对象toStri... 阅读全文

posted @ 2008-03-08 14:22 温少 阅读(5633) 评论(2) 推荐(1) 编辑

关于java、C#泛型的看法
摘要:比较java、C#的泛型语法和各自优缺点 阅读全文

posted @ 2007-11-15 06:47 温少 阅读(8388) 评论(46) 推荐(0) 编辑

Java util.concurrent中LockSupport类在C#中的实现
摘要:java 5之后提供优秀的并发库util.concurrent,.net中缺乏类似的功能。由于硬件体系发生了变化,多核时代来临,.NET中缺乏并发类库显然不合时宜。其中一个办法就是在往C#中移植java的util.concurrent。本文讲述移植的关键点之一,LockSupport.park实现的代码移植。 阅读全文

posted @ 2007-11-15 06:09 温少 阅读(2949) 评论(15) 推荐(0) 编辑

Java util.concurrent包AtomicXXX系列对象在C#中的实现
摘要:从JDK 1.5开始,util.concurrent包提供了Atomic类型,包括AtomicInteger、AtomicLong、 AtomicBoolean、AtomicReference、AtomicFieldUpdate等,这些类在并发编程中大有作用。在.NET中也提供了同样能力的System.Threading.InterLocked,但是不如java中的Atomic系列对象直观好用。本文分析了JDK的底层实现,而且提供了在C#中实现AtomicInteger的源码。 阅读全文

posted @ 2007-11-15 05:52 温少 阅读(3678) 评论(6) 推荐(1) 编辑

旧时王谢堂前燕,飞入寻常百姓家
摘要:2007年4月刊《程序员》,专题为“多核时下的软件开发”。《程序员》并非阳春白雪,它面向大众程序员。面向大众的《程序员》介绍多核、并发,也意味着并发程序设计的开始进入中国大众程序员的视野。并发程序设计,在很多的书籍或者文章中,都会提到他的一个特点,复杂。这个特性,也导致了在以往并发程序设计只为高级程序员所专用。复杂度并非事物的固有属性,并发程序设计的复杂,是我们主观认为。我们认为并发程序设计复杂,... 阅读全文

posted @ 2007-05-01 07:49 温少 阅读(1879) 评论(1) 推荐(0) 编辑

这贴未免太老了吧
摘要:(无意炒作,本文不置顶,仅供朋友参考,不欢迎转贴)2007年4月刊《程序员》中,“两种高性能I/O设计模式的比较”中似乎存在明显错误。假设错误,分析方法错误,结论也错误。结论错误:文章中谈论到java nio在Windows下的实现,他说是WSAEventSelect,但从SUN公布的源码来看,显然是select,而非WSAEventSelect。(参考我以前写的文章“Java nio在Windo... 阅读全文

posted @ 2007-04-30 18:21 温少 阅读(1135) 评论(0) 推荐(0) 编辑

精巧好用的DelayQueue
摘要:我们谈一下实际的场景吧。我们在开发中,有如下场景a) 关闭空闲连接。服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。b) 缓存。缓存中的对象,超过了空闲时间,需要从缓存中移出。c) 任务超时处理。在网络协议滑动窗口请求应答式交互时,处理超时未响应的请求。一种笨笨的办法就是,使用一个后台线程,遍历所有对象,挨个检查。这种笨笨的办法简单好用,但是对象数量过多时,可能存在性能问题,检查间隔时间... 阅读全文

posted @ 2007-04-27 20:04 温少 阅读(42863) 评论(18) 推荐(4) 编辑

对象关系技术的探讨
摘要:这是一个很老的问题了,经常在论坛上看到,很多人也写了相关的文章。我在这方面拥有较多的经验,我也谈一下我的看法吧。我曾经实现过金蝶EAS BOS的多数据支持引擎,脚本引擎,也作过O-R Mapping的预研工作,曾经对多个O-R Mapping产品做过研究。C++、Java、C#都源自Algol,这系列语言也称为Imperative语言,中文翻译为命令式语言。命令式语言建立在冯*诺依曼体系结构上,程... 阅读全文

posted @ 2007-04-23 08:18 温少 阅读(5214) 评论(8) 推荐(0) 编辑

实现了HTTP多线程下载
摘要:不是使用每连接一线程的技术,而是使用多路复用技术。作了一个分配算法。第一个HTTP Request返回取得ContentLength之后,如果使用多个连接下载,则需要一个分配算法,分配每个Request所对应的Range。分配的部分可能是一个连续的块,例如bytes=100-999,也可能是一些碎块,例如bytes=500-600,700-800,850-999。为此,我做了一个数据结构,其提供的... 阅读全文

posted @ 2007-04-12 01:37 温少 阅读(3884) 评论(1) 推荐(0) 编辑

我正在做的一个P2P工具
摘要:上一篇博客写了我一些关于P2P下载以及平台的思考,有这样的思考,是因为我正在做一件这样的事情。我介绍一下我正在做的事情吧:1、基于JXTA,我崇拜Bill Joy,学习JXTA就是因为我崇拜他,之后觉得这个技术很棒。但是JXTA存在一些用户不友好的地方,包括JXTA的ConfigDialog和DialogAuthenticator是十分用户不友好的,我重写了这些部分。虽然是一些无关痛痒的地方,但是... 阅读全文

posted @ 2007-03-25 06:39 温少 阅读(2304) 评论(4) 推荐(1) 编辑

关于Jxta的Advertisement
摘要:编写Jxta程序,通常需要设计自己的Advertisement。以下是我的一些心得:1、关于getID()。getID()可以返回null或者ID.nullID。jxta-cm中的ContentAdvertisement,就是返回null。如果是需要更新的Advertisement,则需要提供ID,否则其他Peer或者Rendezvous Peer收到新的Advertisement不会替换原来的A... 阅读全文

posted @ 2007-03-07 23:43 温少 阅读(840) 评论(1) 推荐(1) 编辑

关于Atomic
摘要:应该来说,util.concurrent包中提供的atomic,包括两部分:1、atomic值对象,例如AtomicInteger、AtomicLong等。常用作计数器。2、AtomicReference3、一些内部使用Lock提供的compareAndSet操作。例如ConcurrentHashMap的putIfAbsent。.NET中也提供了类似的功能,InterLocked类提供着完全的能力... 阅读全文

posted @ 2006-11-14 21:24 温少 阅读(1602) 评论(0) 推荐(0) 编辑

想到Exchanger N parties的一种用法
摘要:一般来说,Exchanger都是一个Consumer,一个producer,在适当的时候互相交换,这样可以避免锁。我想到Exchanger N parties的一种用法。如下:最初N个都是producer,达到一定条件之后,进行交换。根据交换的结果重新确定角色,决定自己是consumer还是producer。这样做的结果是,最初所有都是producer,之后一部分转变成consumer。并且由于c... 阅读全文

posted @ 2006-11-12 22:30 温少 阅读(1101) 评论(0) 推荐(0) 编辑

关于并发程序设计 (一)
摘要:Herb Sutter的观点Herb Sutter最近的一篇文章中如是说:“90年代,我们到处跟人叫讲,什么是对象,什么是虚函数,现在我们到处跟人说,什么是主动对象,什么是Future”,他还说,结构编程、面向对象,现在该轮到并发和并行了。记得在去年,Herb Sutter就写文章预示并发时代的到来,主要是因为CPU的主频将不再会有以前那样的增长速度,而将迎来多核时代。程序将是靠并发来提高运行效率... 阅读全文

posted @ 2006-11-10 03:23 温少 阅读(3809) 评论(3) 推荐(0) 编辑

关于Mina
摘要:觉得Mina有如下问题:1、不支持阻塞模型,对单个连接流量很大的应用,例如服务器之间交互数据,显得不合适。2、不能把main线程加入到事件循环中,对于很多应用来说,这就意味着注定有一个线程是被浪费的。3、使用了一个不是很流行的log框架slf4j。以上是从黑箱的角度来看的,并没有仔细分析源码。对mina的印象变得不是很好…… 阅读全文

posted @ 2006-10-13 08:09 温少 阅读(1136) 评论(1) 推荐(0) 编辑

在Java和.NET平台的加密术比较
摘要:最近在写一个Java的消息服务器,同时需要做一个.NET版本的客户端。他们之间需要安全通讯,基于一些简单的密码协议,用到公钥加密、对称加密、Hash算法。这个过程中,我对这两个平台的加密部分有了一定了解,以下也是我的一些新的认识吧。 1、对称加密1) Java 1.5的对称加密很简单,提供的算法也较多。可以说是,使用简单,傻瓜式,而且功能齐全。 例如: Code highlighting pro... 阅读全文

posted @ 2006-09-22 23:02 温少 阅读(6466) 评论(7) 推荐(1) 编辑

关于对Mina的一些看法
摘要:1、感觉上Mina在0.94的版本中,在靠近ACE,具体的体现在于最高层次的几个接口,例如Acceptor、Connector、Handler。2、依然感觉到有严重的硬伤。主要是不支持阻塞模型。 1)阻塞模型在单连接大流量的情形下有优势。此情景下,阻塞模型的速度要比非阻赛模型快得多,可能数倍。 2)客户端使用非阻塞模型几乎没有任何优势。ACE的Client端缺省非阻塞的。3、感觉上没有完全... 阅读全文

posted @ 2006-09-03 19:47 温少 阅读(956) 评论(0) 推荐(0) 编辑

导航