Java 集群锁如何实现呢?求大家推荐一本介绍java虚拟机原理的英文书

时间:2018-01-02 00:00:05   浏览:次   点击:次   作者:   来源:   立即下载

项目集群部署,每个项目都有多个节点,但是部分功能又需要控制并发,想要使用集群锁来进行资源控制,请问集群锁应该怎么实现呢?有其它方式更好么?

必要条件是有①台服务器提供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权威指南

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息