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

发表时间:2018-01-02 00:00:05 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《多台不同的机器(每台机器上部署相同的Java执行程序)?mysql千万级数据做复杂的查询》相关知识。本篇中小编将再为您讲解标题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权威指南

编后语:关于《Java 集群锁如何实现呢?求大家推荐一本介绍java虚拟机原理的英文书》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《java为什么样不提供类似c的析构函数和delete?这段代码有没有正确释放堆栈空间》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题