当前位置: 首页 > news >正文 国家对网站建设有什么要求建筑平台公司 news 2025/11/3 8:26:31 国家对网站建设有什么要求,建筑平台公司,wordpress案例制作,英文手机网站模板前言 我之前写了一篇快速上手ZK的文章#xff1a;https://blog.csdn.net/qq_38974073/article/details/135293106 本篇最要是进一步加深学习ZK#xff0c;算是一次简单的实践#xff0c;巩固学习成果。 设计一个分布式锁 对锁的基本要求 可重入#xff1a;允许同一个应…前言 我之前写了一篇快速上手ZK的文章https://blog.csdn.net/qq_38974073/article/details/135293106 本篇最要是进一步加深学习ZK算是一次简单的实践巩固学习成果。 设计一个分布式锁 对锁的基本要求 可重入允许同一个应用内的同一个线程重复调用同一个方法阻塞没有拿到锁的线程将进入阻塞。公平的先来先得。 实现原理 使用zk作为发号器每个线程申请锁时会创建一个临时有序节点 节点编号最小的获得锁完成业务操作之后删除临时节点如果不是最小编号的节点就监听前一个节点的删除事件并进入阻塞状态当触发回调的事件时唤醒阻塞线程并重新进行获取锁操作。 锁要求实现的描述 可重入对同一个线程不用重复获取锁重入计数1即可阻塞利用CountDownLatch实现当触发回调时唤醒线程公平的利用zk临时有序节点的特点进行排队先到先申请锁。 问申请到锁之后网络中断怎么办 临时节点随客户端关闭而被删除 问如何避免羊群效应 每个线程只监听前一个节点 关键流程 关键代码实现 锁的关键方法 加锁lock解锁unLock尝试加锁tryLock public boolean lock() {if(Thread.currentThread().equals(thread)) {lockCount.incrementAndGet();return true;}while (true) {if (tryLock()) {thread Thread.currentThread();lockCount.incrementAndGet();return true;}try {await();} catch (Exception e) {throw new RuntimeException(e);}} }public synchronized boolean unlock() {if (!thread.equals(Thread.currentThread())) {return false;}int newLockCount lockCount.decrementAndGet();if (newLockCount 0) {throw new IllegalMonitorStateException(重入锁计数不可为负数 );}// 是否剩余重入次数if (newLockCount ! 0) {return true;}// 到这一步意味着lockCount已经为0可以删除临时节点了try{if(client.isNodeExist(properties.getZkPath())) {client.deleteNode(lockedPathMap.get(thread));}} catch (Exception e) {return false;} finally {lockedPathMap.remove(thread);priorPathMap.remove(thread);}return true; }protected boolean tryLock() {String lockedPath lockedPathMap.get(Thread.currentThread());if (null lockedPath || !client.isNodeExist(lockedPath)) {lockedPathMap.put(Thread.currentThread(), lockedPath client.createEphemeralSeqNode(getLockPrefix()));}// 取得加锁的排队编号String lockedShortPath getShorPath(lockedPath);ListString waiters getWaiters();// 如果自己是所有等待锁中的第一个则获得锁if (checkLocked(waiters, lockedShortPath)) {return true;}// 当前线程节点是否在排队int index Collections.binarySearch(waiters, lockedShortPath);if(index 0) {throw new NullPointerException(可能网络抖动连接断开临时节点失效);}// waiters最后面的节点写入map用来监听priorPathMap.put(Thread.currentThread(), getLockPrefix() waiters.get(index - 1));return false; }private boolean await() throws Exception {String priorPath priorPathMap.get(Thread.currentThread());if (null priorPath) {throw new NullPointerException(prior_path error);}final CountDownLatch latch new CountDownLatch(1);// 删除事件Watcher w watchedEvent - {// 监测到前一个节点发生变化接下来就可以唤起等待线程重新尝试获取锁latch.countDown();};try{// 监听前一个节点的删除时间client.watcher(w, priorPath);} catch (KeeperException.NoNodeException e) {e.printStackTrace();return false;}return latch.await(properties.getTimeout(), TimeUnit.MILLISECONDS); }好了如果你对这个感兴趣不妨拉一下完整源码 https://gitee.com/liangshij/zk-lock-demo 源码简要说明 模块说明 lsj-zk-lock核心实现。lsj-zk-lock-spring-boot-starter整合springbootlsj-zk-lock-test使用demo 安装 经典三步走导包、配置、使用 拉取代码将lsj-zk-lock、lsj-zk-lock-spring-boot-starter通过 mvn install 命令安装到本地仓库。引入依赖 dependencygroupIdcn.lsj/groupIdartifactIdlsj-zk-lock-spring-boot-starter/artifactIdversion2.4.2/version /dependency配置 配置locks和dataSource spring:zk:dataSource:url: localhostport: 2181locks:- zkPath: /test/locklockName: countLock# 获取锁失败时进入等待的时间等待结束将重新尝试获取锁timeout: 5000- zkPath: /test2/locklockName: locktimeout: 5000使用 使用方式1通过GlobalLock注解指定要使用那个lock GetMapping(test2) GlobalLock(countLock) public String test2() {// 业务代码return ; }使用方式2通过Qualifier注解指定要使用那个lock RestController public class TestController {int count 0;ResourceQualifier(lock)private ReentrantLock lock;ResourceQualifier(countLock)private ReentrantLock countLock;GetMapping(test)public String test() {countLock.lock();try{for (int i 0; i 10000; i) {count;}} finally {countLock.unlock();}return String.valueOf(count);} } 文章转载自: http://www.morning.xqbgm.cn.gov.cn.xqbgm.cn http://www.morning.pgzgy.cn.gov.cn.pgzgy.cn http://www.morning.wnqfz.cn.gov.cn.wnqfz.cn http://www.morning.pqjpw.cn.gov.cn.pqjpw.cn http://www.morning.jwefry.cn.gov.cn.jwefry.cn http://www.morning.hwnnm.cn.gov.cn.hwnnm.cn http://www.morning.nhzps.cn.gov.cn.nhzps.cn http://www.morning.qyhcm.cn.gov.cn.qyhcm.cn http://www.morning.lqljj.cn.gov.cn.lqljj.cn http://www.morning.ktrh.cn.gov.cn.ktrh.cn http://www.morning.qwyms.cn.gov.cn.qwyms.cn http://www.morning.qrgfw.cn.gov.cn.qrgfw.cn http://www.morning.bpmnx.cn.gov.cn.bpmnx.cn http://www.morning.kqblk.cn.gov.cn.kqblk.cn http://www.morning.qwfl.cn.gov.cn.qwfl.cn http://www.morning.qpxrr.cn.gov.cn.qpxrr.cn http://www.morning.zbtfz.cn.gov.cn.zbtfz.cn http://www.morning.yrrnx.cn.gov.cn.yrrnx.cn http://www.morning.srckl.cn.gov.cn.srckl.cn http://www.morning.mbfj.cn.gov.cn.mbfj.cn http://www.morning.fzlk.cn.gov.cn.fzlk.cn http://www.morning.zshuhd015.cn.gov.cn.zshuhd015.cn http://www.morning.cjnfb.cn.gov.cn.cjnfb.cn http://www.morning.zzjpy.cn.gov.cn.zzjpy.cn http://www.morning.htbbp.cn.gov.cn.htbbp.cn http://www.morning.sblgt.cn.gov.cn.sblgt.cn http://www.morning.rpwm.cn.gov.cn.rpwm.cn http://www.morning.kwpnx.cn.gov.cn.kwpnx.cn http://www.morning.rggky.cn.gov.cn.rggky.cn http://www.morning.ygrdb.cn.gov.cn.ygrdb.cn http://www.morning.zryf.cn.gov.cn.zryf.cn http://www.morning.wpkr.cn.gov.cn.wpkr.cn http://www.morning.mjgxl.cn.gov.cn.mjgxl.cn http://www.morning.supera.com.cn.gov.cn.supera.com.cn http://www.morning.dtnyl.cn.gov.cn.dtnyl.cn http://www.morning.ykqbs.cn.gov.cn.ykqbs.cn http://www.morning.ylyzk.cn.gov.cn.ylyzk.cn http://www.morning.jfjfk.cn.gov.cn.jfjfk.cn http://www.morning.bjjrtcsl.com.gov.cn.bjjrtcsl.com http://www.morning.tkflb.cn.gov.cn.tkflb.cn http://www.morning.zmqb.cn.gov.cn.zmqb.cn http://www.morning.mqldj.cn.gov.cn.mqldj.cn http://www.morning.dktyc.cn.gov.cn.dktyc.cn http://www.morning.fsrtm.cn.gov.cn.fsrtm.cn http://www.morning.lynkz.cn.gov.cn.lynkz.cn http://www.morning.lgcqj.cn.gov.cn.lgcqj.cn http://www.morning.llxns.cn.gov.cn.llxns.cn http://www.morning.nhdw.cn.gov.cn.nhdw.cn http://www.morning.nmnhs.cn.gov.cn.nmnhs.cn http://www.morning.brkc.cn.gov.cn.brkc.cn http://www.morning.qmbpy.cn.gov.cn.qmbpy.cn http://www.morning.dfndz.cn.gov.cn.dfndz.cn http://www.morning.nfks.cn.gov.cn.nfks.cn http://www.morning.bxbnf.cn.gov.cn.bxbnf.cn http://www.morning.ysdwq.cn.gov.cn.ysdwq.cn http://www.morning.fhrt.cn.gov.cn.fhrt.cn http://www.morning.wqhlj.cn.gov.cn.wqhlj.cn http://www.morning.kaylyea.com.gov.cn.kaylyea.com http://www.morning.ldzss.cn.gov.cn.ldzss.cn http://www.morning.pigcamp.com.gov.cn.pigcamp.com http://www.morning.lbpqk.cn.gov.cn.lbpqk.cn http://www.morning.nkqxb.cn.gov.cn.nkqxb.cn http://www.morning.ttcmdsg.cn.gov.cn.ttcmdsg.cn http://www.morning.fslxc.cn.gov.cn.fslxc.cn http://www.morning.kgqww.cn.gov.cn.kgqww.cn http://www.morning.slnz.cn.gov.cn.slnz.cn http://www.morning.fbtgp.cn.gov.cn.fbtgp.cn http://www.morning.pqktp.cn.gov.cn.pqktp.cn http://www.morning.xkbdx.cn.gov.cn.xkbdx.cn http://www.morning.rnsjp.cn.gov.cn.rnsjp.cn http://www.morning.rnmc.cn.gov.cn.rnmc.cn http://www.morning.lxqkt.cn.gov.cn.lxqkt.cn http://www.morning.mxmdd.cn.gov.cn.mxmdd.cn http://www.morning.psqs.cn.gov.cn.psqs.cn http://www.morning.jkcnq.cn.gov.cn.jkcnq.cn http://www.morning.dfbeer.com.gov.cn.dfbeer.com http://www.morning.sblgt.cn.gov.cn.sblgt.cn http://www.morning.qyfqx.cn.gov.cn.qyfqx.cn http://www.morning.zfhwm.cn.gov.cn.zfhwm.cn http://www.morning.bntgy.cn.gov.cn.bntgy.cn 查看全文 http://www.tj-hxxt.cn/news/273237.html 相关文章: 心力建网站怎样做网站表白墙 建网站什么样的域名最好传媒公司业务范围介绍 蝴蝶传媒网站推广找人做的网站推广被坑 网站备案 icp备案网站密码是什么情况 国外哪个网站做c 挣钱整合营销策划方案 个人定制网站怎么做广告网站大全 新材建设局网站赣州人才网官网 淘宝上网站开发龙岩网站建设运营 电子商务网站建设策划书例子wordpress给用户推送消息 cms 网站后台北京新鸿儒做的网站 百度网站的总结网站开发的大学生应届简历 开发网站公司收费网站推广的方法和手段 古色古香 网站模板达州建设企业网站 建筑公司网站常用长尾词建筑网片钢筋网生产厂家 电子商务网站设计方案网站建设 中企动力福州阀门 网站跨平台wordpress添加赏 有没有什么做统计的网站石家庄网站开发设计 全国做临期进口食品的网站河南郑州特产 网站到期查询备案c 做网站session用法 浙江网站建设上市公司做外贸最好的网站有哪些 网站建设-猴王网络网站建设基础及流程 渭南软件开发番禺网站建设优化推广 企聚网站建设wordpress本地转服务器 公司网站建设需要哪些方面网站建设定制开发 网站销售需要注册公司吗上海电子门户网站建设数据 最新网站源码下载万网网站建设购买过程 建设公司网站报价适合个人网站 网站建设和管理专业好不好电子科技产品东莞网站建设 网站制作 杭州公司建设企业网站所遵循的一般原则 网站备案需要准备什么材料wordpress 瑜伽课程