SE
文章平均质量分 78
iteye_19132
这个作者很懒,什么都没留下…
展开
-
Java Concurrent (1)
本文节选自 Effective Java by Joshua Bloch 和 Concurrent Programming in Java by Doug Lea. 1.1 概述 多线程程序设计比单线程程序设计要困难的多,所以,如果一个库中的类能够帮助你从低层的多线程程序设计中解脱出来,那么一定要使用这个类。比如java.util.Timer。另外,util.concurrent...2008-02-14 20:40:19 · 138 阅读 · 0 评论 -
Perf4J
1 Overview Perf4j是一个用于计算和显示性能相关的统计信息(例如最大值、最小值、算数平均均值、标准方差和TPS等)的工具集。除了将统计信息输出到标准错误流或者日志中之外,Perf4j也支持输出为图表(使用Google Chart API),以及通过JMX公开。其主要的功能如下:以StopWatch这种简洁的方式进行计时。提供了一个命令行工具,用于分析日志以及生...2009-06-11 23:13:31 · 190 阅读 · 0 评论 -
Bloom Filter
1 Overview Bloom filter最早由 Burton Howard Bloom提出,是一种用于判断成员是否存在于某个集合中的数据结构。 Bloom filter的判断基于概率论:如果某个成员存在于集合中,那么Bloom filter不会返回假(即不存在),也就是说false negative是不可能的。如果某个成员实际上不存在于集合中,Bloom filter...2010-10-19 00:41:21 · 203 阅读 · 0 评论 -
Sequantial Lock in Java
1 Overview Linux内核中常见的同步机制有Atomic Operation,Spin Locks,Semaphore,Mutex等。其中Spin Locks和Semaphore都支持读/写锁。此外,Linux内核还支持一种更轻量级的读/写锁定机制:Sequential Lock。跟其它读/写锁定机制相比,Sequential Lock有以下特点:在获取锁时偏向写锁。只...2011-06-07 17:00:41 · 157 阅读 · 0 评论 -
inotify-java
1 Overview 最近公司的一个任务需要实时监控文件系统中某个文件的内容变化。由于程序本身由Java编写,因此使用了inotify-java(http://code.google.com/p/inotify-java/)。inotify-java只是对Linux中inotify相关的内核调用进行了封装,因此在使用inotify-java之前有必要了解一下inotify。 ...2009-07-22 22:58:59 · 1268 阅读 · 0 评论 -
What's New on Java 7 Phaser
1 Overview Java 7的并发包中推出了Phaser,其功能跟CyclicBarrier和CountDownLatch有些重叠,但是提供了更灵活的用法,例如支持动态调整注册任务的数量等。本文在Phaser自带的示例代码基础上进行一下简单的分析。 2 Glossary2.1 Registration Phaser支持通过register()和bul...2011-07-29 10:15:26 · 101 阅读 · 0 评论 -
Distributed Lock
1 Overview 在分布式系统中,通常会避免使用分布式锁。然而在某些场景下,还是存在对分布式锁的需求。跟普通锁相比,分布式锁面需要对的问题更多,例如怎样保证某个进程在持有锁时意外终止之后,其它进程也能够正常地获得锁等等。笔者认为一个比较好的分布式锁实现是Terracotta,但是这不是本文的重点,感兴趣的读者可以参考笔者的Terracotta in Action 系列文章(h...2011-08-02 22:02:29 · 519 阅读 · 0 评论 -
ID Generator
关于ID Generator,想必大多数项目都有应用。跟按需生成ID相比,预生成一定数量的ID并加以缓存的方式更有助于提升性能。预生成ID的时机,通常是在发现缓存的ID用尽的时候。这种方式有个缺陷,即从调用者的角度来看每次取得ID所花费的时间可能并不均等。 如果应用要求每次取得ID时都要尽可能的快且时间均等,那么ID Generator可以在发现缓存的ID用尽之前进行预生成,保持...2010-06-14 14:45:24 · 278 阅读 · 0 评论 -
JLine
Overview JLine 是一个用来处理控制台输入的Java类库,目前最新的版本是0.9.94。其官方网址是http://jline.sourceforge.net。在介绍JLine之前,首先还是介绍一下Java 6中的Console类,以便进行对比。 2 Java Console 通过调用System.console()方法可以得到与当前虚拟机对应的Co...2010-06-17 09:11:14 · 472 阅读 · 0 评论 -
Open Addressing
1 Overview Open addressing和Chaining是两种不同的解决hash冲突的策略。当多个不同的key被映射到相同的slot时,chaining方式采用链表保存所有的value。而Open addressing则尝试在该slot的邻近位置查找,直到找到对应的value或者空闲的slot, 这个过程被称作probing。常见的probing策略有Linear pr...2010-07-07 17:59:38 · 421 阅读 · 0 评论 -
Inside AbstractQueuedSynchronizer (1)
Inside AbstractQueuedSynchronizer (1)Inside AbstractQueuedSynchronizer (2)Inside AbstractQueuedSynchronizer (3)Inside AbstractQueuedSynchronizer (4) 1 Overview 如果查看Reentrant...2012-01-06 11:04:09 · 128 阅读 · 0 评论 -
Inside AbstractQueuedSynchronizer (2)
Inside AbstractQueuedSynchronizer (1)Inside AbstractQueuedSynchronizer (2)Inside AbstractQueuedSynchronizer (3)Inside AbstractQueuedSynchronizer (4) 3 AbstractQueuedSynchronizer ...2012-01-07 17:54:19 · 130 阅读 · 0 评论 -
Inside AbstractQueuedSynchronizer (3)
Inside AbstractQueuedSynchronizer (1)Inside AbstractQueuedSynchronizer (2)Inside AbstractQueuedSynchronizer (3)Inside AbstractQueuedSynchronizer (4) 3.4 Template Method Abstra...2012-01-07 23:37:23 · 128 阅读 · 0 评论 -
Inside AbstractQueuedSynchronizer (4)
Inside AbstractQueuedSynchronizer (1)Inside AbstractQueuedSynchronizer (2)Inside AbstractQueuedSynchronizer (3)Inside AbstractQueuedSynchronizer (4) 3.6 ConditionObject Abstra...2012-01-08 17:06:55 · 143 阅读 · 0 评论 -
A Hierarchical CLH Queue Lock
A Hierarchical CLH Queue Lock (Victor Luchangco, Daniel Nussbaum, Nir Shavit) 这篇论文值得仔细推敲,虽然未必适合在Java中实际应用,但是至少提供了一种思路。2012-01-14 19:01:11 · 230 阅读 · 0 评论 -
Inside java.lang.Enum
1 Introduction to enum Java SE 5中引入了枚举,同时添加了一个新关键字enum。下面是个枚举的例子:public enum Suit { CLUBS, DIAMONDS, HEARTS, SPADES;} 枚举类型也是普通的Java类,继承自java.lang.Enum并默认实现了java.lang.Comparable接口和jav...2010-08-04 15:40:14 · 114 阅读 · 0 评论 -
JMX Remoting
1 Introduction Java Management Extension (JMX) API定义于JSR 3,用于应用程序管理。这些API对于被管理的应用程序来说是本地的。也就是说,在JSR 160发布之前,如果客户端要通过JMX来管理和监控远程的应用程序,并没有标准的做法。JSR 160扩展了JSR 3,提供了标准的API用于连接到支持JMX的远程应用程序。JSR 255将会把...2008-09-24 10:29:01 · 108 阅读 · 0 评论 -
Progress Estimator
Jakarta Commons Cookbook这本书中介绍了一个使用回归分析来估计某个工作需要多长时间的例子。 笔者看过之后感觉有些问题(也可能是笔者数学功底不够)。以下是经过笔者修改后的代码。 import org.apache.commons.lang.math.RandomUtils;import org.apache.commons.lang.time.StopWat...2009-02-22 19:37:26 · 215 阅读 · 0 评论 -
JGroups (4)
4 Protocol Stack4.1 Transport protocols Transport protocols是指协议栈中最底层的协议,它们负责发送和接收消息。JGgroups提供了以下几种transport protocols。4.1.1 UDP JGroups中的UDP协议使用IP multicast向集群发送消息,使用UDP datagram向单个的成员发...2008-06-04 08:21:33 · 347 阅读 · 1 评论 -
Java Concurrent (2)
本文节选自 Effective Java by Joshua Bloch 和 Concurrent Programming in Java by Doug Lea. 1.3 原子数据的同步 java语言保证读或写一个变量是原子(atomic)的,除非这个变量的类型是long或double.换句话说,读入一个非long或double类型的变量,可以保证返回值一定是某个线程保存在该变量...2008-02-14 20:57:19 · 182 阅读 · 0 评论 -
Java Concurrent (3)
本文节选自 Effective Java by Joshua Bloch 和 Concurrent Programming in Java by Doug Lea. 1.6 避免过多的同步1.6.1是否需要同步 过多的同步可能会导致性能降低、死锁,甚至不确定行为。通常,在同步区域内应该做尽可能少的工作。同步区域之外被调用的外来方法被称为“开放调用(open call)”。除了...2008-02-14 21:20:46 · 104 阅读 · 0 评论 -
Java Concurrent (4)
本文节选自 Effective Java by Joshua Bloch 和 Concurrent Programming in Java by Doug Lea. 1.7 使用锁工具1.7.1 synchronized 的限制 内部的synchronized方法和块可以满足很多基于锁的应用,但是它有以下限制: 如果某个线程试图获得锁,而这个锁已经被其他线程持有,那么没...2008-02-14 21:31:24 · 94 阅读 · 0 评论 -
Java Clone
本文部分内容节选自 Effective Java by Joshua Bloch. Cloneable接口的目的是作为一个mixin接口,表明实现这个接口的类的对象允许克隆。但是Cloneable接口本身并没有包含任何方法,但是它决定了Object的clone方法的行为:如果一个类实现了Cloneable,则Object的clone方法返回该对象的逐域拷贝(通常所说的浅拷贝,而且在这...2008-02-15 20:43:22 · 121 阅读 · 0 评论 -
Object Oriented Programming (1)
本文部分内容节选自Effective C++ by Scott Meyers 和 UML面向对象设计基础 by Meilir Page-Jones。 1 封装1.1概述 软件是在20世纪40年代中以多个机器指令的集合体的形式首次出现的。后来进化到多行的汇编代码,此后不久,一种非常重要的结构出现了,这种结构将多行代码集中到一个程序单元里,并赋予一个惟一的名字,叫做子程序(或者过...2008-02-18 11:20:26 · 239 阅读 · 1 评论 -
Object Oriented Programming (2)
本文部分内容节选自Effective C++ by Scott Meyers 和 UML面向对象设计基础 by Meilir Page-Jones。 2 继承 关于继承,最重要的一个规则是:公共继承(public inheritance)意味着“是一种(is a)”的关系。私有继承(private inheritance)意味着“根据某物实现(implemented-in-ter...2008-02-18 11:34:03 · 93 阅读 · 0 评论 -
Object Oriented Programming (3)
本文部分内容节选自Effective C++ by Scott Meyers 和 UML面向对象设计基础 by Meilir Page-Jones。 3 多态3.1 概述 简单来说,多态(polymorphism)是具有表现多种形态的能力的特征,这使得开发语言具有根据对象的类型以不同方式进行处理的能力。多态意味着许多类可以提供同样的属性或者方法,而且调用者在调用这些属性或方法...2008-02-18 11:50:01 · 126 阅读 · 0 评论 -
Multicast Discovery
这几天抽空看了看英文版的JMX in Action,本来对于JMX的理解限于一些点,读过之后感觉这些点终于连成网了。首先评论一下这本书的作者Benjamin G. Sullins和Mark B. Whipple。跟有些作者不同,这两位仁兄没有见龙卸甲,舍我其谁的风范,而是充分考虑的读者的智商和承受能力,把书写的比较浅显易懂(我觉得好的程序员在编写程序的时候,也应该具备这样的素质),有的地方甚...2008-02-29 15:19:06 · 181 阅读 · 0 评论 -
OSGi Embedded HttpService
1 概述 Equinox 提供了两种OSGi embedded HttpSerivce的实现,如下: org.eclipse.equinox.http。适合资源受限的环境。兼容Servlet 2.4,但是对Servlet 2.1以外的API提供了有限的支持。 org.eclipse.equinox.http.jetty。使用Jetty 作为引擎,支持Servlet 2....2008-03-03 14:01:51 · 234 阅读 · 0 评论 -
jManage
1 Overview 由于项目需要, 笔者开发了一个基于JMX的监控程序。这个监控程序本身也提供了JMX远程服务,并且在开发过程中一直使用jconsole来管理这个监控程序。本打算在将监控程序部署到生产环境后,通过设置NAT(目前还不能通过VPN接入到生产环境)以便仍然可以通过jconsole来管理这个监控程序。但是发现为RMI使用的端口设置好NAT之后,jconsole仍然无法连接到监...2008-12-22 00:40:33 · 219 阅读 · 0 评论 -
Java Generic (1)
1 泛型类 泛型允许对类型进行抽象,最常见的泛型类是容器类。例如:List<String> list = new ArrayList<String>();list.add("1");list.add("2");for(String s: list) { System.out.println(s);} 以上例子中,如果试图向list...2008-04-22 21:17:52 · 143 阅读 · 0 评论 -
Java Generic (2)
4 泛型和继承 首先考虑如下代码:public class Base { private String id; public String getName() { return "Base"; } public final String getId() { return id; }...2008-04-23 07:59:03 · 108 阅读 · 0 评论 -
JGroups (1)
1 Overview JGroups是一个用于建立可靠的组播通信的工具包(这里指的组播并不一定是IP Multicast,JGroups同样支持使用TCP作为传输协议)。其中可靠性是指通过适当的配置可以保证:消息在传输的过程中不会丢失;所有的接收者以相同的顺序接受所有的消息;原子性:一个消息要么被所有的接收者接收,要么不被任何一个接收者都接收。目前在JBoss Application S...2008-06-01 22:27:26 · 160 阅读 · 0 评论 -
JGroups (2)
2 API2.1 Interfaces2.1.1 Transport Transport接口只定义了最简单的方法,用于发送和接收消息。其定义如下:public interface Transport { void send(Message msg) throws Exception; Object receive(long timeout) throws ...2008-06-02 08:22:24 · 210 阅读 · 0 评论 -
JGroups (3)
3 Building Blocks Building blocks位于org.jgroups.blocks包中,在逻辑上可以视为channels之上的一层,它提供了更复杂的接口。Building blocks并不必依赖于channels,部分building blocks只需要实现了Transport接口的类即可工作。以下简要介绍部分building blocks。3.1 Messa...2008-06-03 08:13:29 · 170 阅读 · 0 评论 -
Code Optimization
当前开发人员在进行编码的时候,可能很少关注纯粹代码级别的优化了。关于优化,或许很多人会说不要过早地进行优化。从某种程度上来说,笔者也认同这个观点。但是当明确了优化对象的时候,我们都有哪些办法呢?以下是几个代码优化的简单例子。 1 Sample 1public class LoopPerf { public static double add1(double a...2011-10-14 00:11:48 · 380 阅读 · 0 评论