- 浏览: 483699 次
- 性别:
- 来自: 大连
最新评论
-
龘龘龘:
TrueBrian 写道有个问题,Sample 1中,为了控制 ...
What's New on Java 7 Phaser -
龘龘龘:
楼主总结的不错。
What's New on Java 7 Phaser -
TrueBrian:
有个问题,Sample 1中,为了控制线程的启动时机,博主实际 ...
What's New on Java 7 Phaser -
liguanqun811:
不知道楼主是否对zookeeper实现的分布式锁进行过性能测试 ...
Distributed Lock -
hobitton:
mysql的get lock有版本限制,否则get lock可 ...
Distributed Lock
文章列表
2.5 Clustering
ActiveMQ从多种不同的方面提供了集群的支持。
2.5.1 Queue consumer clusters
ActiveMQ支持订阅同一个queue的consumers上的集群。如果一个consumer失效,那么所有未被确认(unacknowledged)的消息都会被发送到这个queue上其它的consumers。如果某个consumer的处理速度比其它consumers更快,那么这个consumer就会消费更多的消息。
需要注意的是,笔者发现AcitveMQ5.0版本的Queue consumer clusters存在一个bug ...
2.4 Security
ActiveMQ支持可插拔的安全机制,用以在不同的provider之间切换。
2.4.1 Simple Authentication Plugin
Simple Authentication Plugin适用于简单的认证需求,或者用于建立测试环境。它允许在XML配置文件中指定用户、用户 ...
2.3 Persistence
2.3.1 AMQ Message Store
AMQ Message Store是ActiveMQ5.0
缺省的持久化存储。Message commands被保存到transactional journal(由rolling data logs组成)。Messages被保存到data logs中,同时被reference store进行索引以提高存取速度。Date logs由一些单独的data log文件组成,缺省的文件大小是32M,如果某个消息的大小超过了data log文件的大小,那么可以修改配置以增加data log文件的大小。如果某个dat ...
2.2 Transport
ActiveMQ目前支持的transport有:VM Transport、TCP Transport、SSL Transport、Peer Transport、UDP Transport、Multicast Transport、HTTP and HTTPS Transport、Failover Transport、Fanout Transport、Discovery Transport、ZeroConf Transport等。以下简单介绍其中的几种,更多请参考Apache官方文档。
2.2.1 VM Transport
VM transpo ...
1 JMS
在介绍ActiveMQ之前,首先简要介绍一下JMS规范。
1.1 JMS的基本构件
1.1.1 连接工厂
连接工厂是客户用来创建连接的对象,例如ActiveMQ提供的ActiveMQConnectionFactory。
1.1.2 连接
JMS Connection封装了客户与JMS ...
本文基于Apache Tomcat v5.0。
1 Tag handler
1.1 重用
Tag handler被保存在org.apache.jasper.runtime.TagHandlerPool对象池中,以下是TagHandlerPool的几个方法:
public TagHandlerPool() 用缺省容量构造TagHandlerPool
public Tag get(Class handlerClass) throws JspException 从对象池中取出下个可用的tag handler。如果对象池为空,则实例化一个tag handler(需要注意的是, ...
本文部分内容节选自Effective C++ by Scott Meyers 和 UML面向对象设计基础 by Meilir Page-Jones。
3 多态
3.1 概述
简单来说,多态(polymorphism)是具有表现多种形态的能力的特征,这使得开发语言具有根据对象的类型以不同方式 ...
本文部分内容节选自Effective C++ by Scott Meyers 和 UML面向对象设计基础 by Meilir Page-Jones。
2 继承
关于继承,最重要的一个规则是:公共继承(public inheritance)意味着“是一种(is a)”的关系。私有继承(private inheritance) ...
本文部分内容节选自Effective C++ by Scott Meyers 和 UML面向对象设计基础 by Meilir Page-Jones。
1 封装
1.1概述
软件是在20世纪40年代中以多个机器指令的集合体的形式首次出现的。后来进化到多行的汇编代码,此后不久,一种非 ...
本文部分内容节选自 Effective Java by Joshua Bloch.
Cloneable接口的目的是作为一个mixin接口,表明实现这个接口的类的对象允许克隆。但是Cloneable接口本身并没有包含任何方法,但是它决定了Object的clone方法的行为:如果一个类实现了Cloneable,则Object的clone方法返回该对象的逐域拷贝(通常所说的浅拷贝,而且在这个过程中没有调用构造函数);否则的话,它抛出一个CloneNotSupportedException异常。 在Object类中,clone方法被定义成protected native Object cl ...
本文节选自 Effective Java by Joshua Bloch 和 Concurrent Programming in Java by Doug Lea.
1.7 使用锁工具
1.7.1 synchronized 的限制
内部的synchronized方法和块可以满足很多基于锁的应用,但是它有以下限制:
如果某个线程试图获得锁,而这个锁已经被其他线程持有,那么没有办法回退,也没有办法在等待一段时间后放弃等待,或者在某个中断之后取消获取锁的企图,这些使得线程很难从活性问题中恢复。
没有办法改变锁的语义形式,例如重入性、读何写保护或者公平性等方面。
没有同步 ...
本文节选自 Effective Java by Joshua Bloch 和 Concurrent Programming in Java by Doug Lea.
1.6 避免过多的同步
1.6.1是否需要同步
过多的同步可能会导致性能降低、死锁,甚至不确定行为。通常,在同步区域内应该做尽可能少的工作 ...
本文节选自 Effective Java by Joshua Bloch 和 Concurrent Programming in Java by Doug Lea.
1.3 原子数据的同步
java语言保证读或写一个变量是原子(atomic)的,除非这个变量的类型是long或double.换句话说,读入一个非long或double类型的变量,可以保证返回值一定是某个线程保存在该变量中的,即使多个线程在没有同步的时候并发地修改这个变量,也是如此。
虽然原子性保证了一个线程在读写数据的时候,不会看到一个随机的数值,但是它并不保证一个线程写入的值对于另外一个线程是可见 ...
本文节选自 Effective Java by Joshua Bloch 和 Concurrent Programming in Java by Doug Lea.
1.1 概述
多线程程序设计比单线程程序设计要困难的多,所以,如果一个库中的类能够帮助你从低层的多线程程序设计中解脱出来,那么一定要使用这个类。比如java.util.Timer。另外,util.concurrent包是一个高层次的线程工具集合。在 Java 语言中,协调对共享字段的访问的传统方法是使用同步,确保完成对共享字段的所有访问。对于现代 JVM 而言,无竞争的同步现在非常便宜。以下是两个简单例子:
pu ...
Spring RMI 不需要输出的接口继承自Remote(这也是Spring一直坚持的原则之一: 业务逻辑不应该同远程逻辑一起设计)。但是这是如何做的呢, 答案是代理。以下是一个简化版的例子程序,用于模拟Spring的实现。
首先是用于发布的接口及实现:
MockProduct.java
public interface MockProduct {
String getDescription();
}
MockProductRemote.java
import java.rmi.Remote;
import java.rmi.Remo ...