在上一篇文章中,小编为您详细介绍了关于《多台不同的机器(每台机器上部署相同的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?这段代码有没有正确释放堆栈空间》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器