Java 集群锁如何实现呢?求大家推荐一本介绍java虚拟机原理的英文书
项目集群部署,每个项目都有多个节点,但是部分功能又需要控制并发,想要使用集群锁来进行资源控制,请问集群锁应该怎么实现呢?有其它方式更好么?
必要条件是有①台服务器提供CAS操作。其他的随你怎么实现,也可以继承dog.lee写的AbstractQueuedSynchronizer同步器在自己实现tryAcquire和release函数。
粘①小段代码给你:
tryAcquire()函数去cas操作远程服务器,不成功则自旋等待。
自旋等待的好处就是远程服务器不需要写代码,本地服务器不停地pull数据即可,开发简单。
也可以仿照zk锁那么做,tryAcquire成功后原地等待,等远程服务器通知,再unpark自己,但是远程服务器需要开发个stub与本地服务器不停地交互,什么heardbeat啊,各种请求状态啊,维护起来麻烦。而且不支持wait/notify机制呢。
我在github上有个分布式所的通用代码,支持waitnotify机制,支持interupt,如果要实现生产消费者模式的话,可以用用,如果有兴趣可以给你。
@Overridepublic void lock() {Thread currentThread = Thread.currentThread();if(headThread == currentThread){return ;}try{for(;;){if(compareAndSetHeadThread(null, currentThread)){while(!tryAcquire()){LockSupport.parkNanos(timepart());Thread.interrupted();//lock函数不支持中断,所以清除标志位。}return ;}else{waitingQueue.add(currentThread);LockSupport.park();while(Thread.interrupted()){LockSupport.park();//lock函数不支持中断,所以清除标志位。}}}}catch(RuntimeException ex){cancelAcquire();throw ex;}}
英文推荐个短小精悍的吧,内存管理白皮书--Memory Management in the Java HotSpot™ Virtual Machine.
中文的我强烈推荐周志明的\"深入理解Java虚拟机\"
无论哪本书,应该都绕不过这本:The Java® Virtual Machine Specification 。
Hmm...请参考我整理的书单:从表到里学习JVM实现
jvm规范,深入java虚拟机,jrockit权威指南
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息