Java实现一个简单的线程池

我们知道java.util.concurrent包下有个Executors类,这个类提供了一系列静态方法来创建各种线程池,例如newCachedThreadPool(), newFixedThreadPool()等等。参照ThreadPoolExecutor类的功能,我们知道,一个线程池所需要实现的功能和接口大致是:(1)维护一个任务队列,客户端可以提交Runnable任务到这个队列中(2)初始化…

more >>

行为型设计模式 — 状态模式

什么是状态模式状态模式允许对象在状态发生变化时执行不同的行为。状态模式是对象的一种行为模式,它提供一种机制来统一管理对象的多种状态以及状态的转移,使得对对象的调用随着对象状态的改变而执行不同的行为。状态模式的类图如下:状态模式下有三类角色:Context:上下文类,持有State属性并提供客户端感兴趣的接口State:状态接口ConcreteState:具体的状态类示例程序:State接口pack…

more >>

使用DelayQueue实现缓存

实现一个缓存其实就是需要实现一个能够存储键值对,并自动清理超时缓存项的数据结构。java.util.concurrent包下有个DelayQueue,它是一个无界的BlockingQueue,存入DelayQueue的对象必须实现Delayed接口。DelayQueue提供一个阻塞的take方法,只有过期的Delayed对象才能被take出队列。利用DelayQueue的这个特性,我们可以用Del…

more >>

JSON-RPC使用及自动加载服务框架

什么是JSON-RPCJson-RPC是以Json作为数据交换格式的远程过程调用协议,利用该协议我们可以实现在不同平台之间进行远程的服务调用。JSON-RPC常用与应用内的模块集成。Json-RPC-Java是用Java实现的一个Json-RPC框架,它允许我们在web容器中搭建远程过程调用服务,并提供Javascript客户端API,实现使用Js远程调用Java方法。如何使用JSON-RPC-J…

more >>

Java实现读写锁

实现一个简单的读写锁我们知道,使用读写锁的目的是使读操作共享一个锁,写操作独占一个锁,从而使得多个读操作可以同时进行,而进行写操作时才实现互斥,当读操作比较频繁时,可以减少加锁释放锁带来的消耗。我之前的博文有介绍到ReentrantReadWriteLock的使用,其实我们完全可以自己实现一个读写锁。首先我们必须理解读写锁的一些规则:(1) 加读锁之前,必须检查当前是否已经有写操作,或者有写操作的…

more >>

Java堆外内存

什么是堆外内存Java对象分配的内存包括堆内存和堆外内存。堆外内存即计算机内存中除JVM堆内存之外的内存,例如一台32位的Windows服务器内存时2GB,其中1.6GB分配给了Java堆,那么剩余的0.4GB就是堆外内存。堆外内存的垃圾回收堆外内存的垃圾回收需要主要注意的一点是,堆外内存并不是JVM管辖的范围,堆外内存不足时并不会通知GC进行垃圾回收,只有等到JVM进行Full GC时才会顺带清…

more >>

行为型设计模式 — 备忘录模式

什么是备忘录模式备忘录模式(Memento Pattern)又称快照模式(Snapshot Pattern),是对象的一种行为型模式。备忘录模式引入一个备忘录角色,用来记录一个对象某个时刻的状态(对象的状态通常由对象的属性值决定),以便在将来某个时刻恢复这个状态。备忘录模式的类图如下:Originator:原始角色,具有某些属性,提供创建备忘录和恢复备忘录的接口,以实现保存某一时刻状态和恢复状态M…

more >>

substring()内存泄露隐患

我们知道对于一个字符串,我们可以调用其 substring(int beginIndex, int endIndex)方法返回一个下标从beginIndex到endIndex-1的子字符串。JDK6的substring方法与JDK7的是不同的版本,JDK6的substring方法可能带来内存泄露问题。内存泄露是指Java堆中某些对象已经不被程序所使用,但仍然存在指向这些对象的引用,即存…

more >>

JDK监控和故障处理工具 (I)

JDK提供的命令行工具大多是jdk/lib/tools.jar类库的一层简单的封装, 其中包括了一些在运行时监控虚拟机数据、定位程序故障、优化程序性能的工具。Sun JDK提供的监控和故障处理工具常用的有:jps (JVM Process Status)虚拟机进程状态工具。显示当前系统中正在运行的虚拟机进程状态信息,包括虚拟机进程的本地虚拟机ID(LVMID),以及虚拟机执行的主类jstat (J…

more >>