当前位置: 首页 > news >正文

通过单例模式模拟RAC连接 (r4笔记第76天)

单例模式基本是学习设计模式的第一个模式,而且在工作中使用太普遍了,通用到我们感觉就应该是这样,但是如果真给你纸和笔,在5分钟内写出一个完整的单例模式,估计还是有不少人会中招。RAC是实时应用集群,是oracle的一种高可用方案,假设我们有2个节点,如果其中一个节点出现问题,另外一个节点依然能够正常工作,对于客户端来说感觉是完全透明的,感觉不到任何的异常。我们今天来通过设计模式的单例模式来模拟一下RAC连接的情况首先是单例模式,一般都是认为一个类可以产生一个对象,如果对象的数量不收限制,也是可以实现的,这个就是单例模式的扩展。我尝试写了如下的代码,模拟两个节点的情况

点击(此处)折叠或打开

  1. import java.util.ArrayList;public class RacTest {private static final RacTest rac1= new RacTest();private static final RacTest rac2= new RacTest();private final static ArrayList<RacTest> racNodes = new ArrayList<RacTest>();private RacTest(){}public static RacTest getInstance(){int i = (int)(1+Math.random()*2)-1;if(racNodes.size()==0){racNodes.add(rac1);racNodes.add(rac2);}System.out.println("rac instance "+(i+1)+" "+racNodes.get(i));return racNodes.get(i);}public static void main(String[] args){for(int i=0;i<20;i++){RacTest.getInstance();} }}

这样,我们定义了两个节点,在初始化的时候指定getInstance()方法,然后在每次调用的时候都只初始化一次。当然从客户端来说为了能够更加清晰表达出连接节点的随机性,我写了一个循环,一次循环200次,打印出连接的情况,通过数据更能够说明。可以从初始化的两个对象的地址看到只有两个对象。rac instance 1 RacTest@42e816rac instance 1 RacTest@42e816rac instance 1 RacTest@42e816rac instance 2 RacTest@9304b1rac instance 1 RacTest@42e816rac instance 1 RacTest@42e816rac instance 2 RacTest@9304b1rac instance 2 RacTest@9304b1rac instance 1 RacTest@42e816rac instance 2 RacTest@9304b1rac instance 1 RacTest@42e816rac instance 2 RacTest@9304b1rac instance 2 RacTest@9304b1rac instance 1 RacTest@42e816rac instance 2 RacTest@9304b1rac instance 1 RacTest@42e816rac instance 1 RacTest@42e816rac instance 1 RacTest@42e816rac instance 1 RacTest@42e816rac instance 2 RacTest@9304b1

相关文章:

  • 特殊的物化视图刷新 (r4笔记第77天)
  • 总结nmon的诸多优点 (r4笔记第78天)
  • 不要成为技术的奴隶(二) (r4笔记第79天)
  • 清华梦的粉碎读后感--论理想主义者王垠(r4笔记第80天)
  • 浅谈Hadoop (r4笔记第81天)
  • MongoDB初探第二篇 (r4笔记第82天)
  • 大话UML中类之间的关系 (r4笔记第83天)
  • 关于Oracle的技术问答 (r4笔记第85天)
  • 【非原创】完全用Linux工作(下)(r4笔记第86天)
  • 【非原创】完全用Linux工作(上)(r4笔记第86天)
  • 一条delete语句的调优(r4笔记第86天)
  • 【非本人原创】突然35岁:捡点我的职业生涯(下)(r4笔记第87天)
  • 【非本人原创】突然35岁:捡点我的职业生涯(上)(r4笔记第87天)
  • delete相关的pl/sql调优(r4笔记第87天)
  • 【非原创】这一生至少当一次傻瓜(r4笔记第88天)
  • SegmentFault for Android 3.0 发布
  • 收藏网友的 源程序下载网
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • centos安装java运行环境jdk+tomcat
  • es6(二):字符串的扩展
  • HTML5新特性总结
  • JavaScript 奇技淫巧
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • js数组之filter
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • oschina
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Rancher-k8s加速安装文档
  • React-生命周期杂记
  • v-if和v-for连用出现的问题
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 记录:CentOS7.2配置LNMP环境记录
  • 记一次删除Git记录中的大文件的过程
  • 如何合理的规划jvm性能调优
  • 入门级的git使用指北
  • 什么是Javascript函数节流?
  • 实战|智能家居行业移动应用性能分析
  • 主流的CSS水平和垂直居中技术大全
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​水经微图Web1.5.0版即将上线
  • (二)丶RabbitMQ的六大核心
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十一)手动添加用户和文件的特殊权限
  • (译) 函数式 JS #1:简介
  • (译)2019年前端性能优化清单 — 下篇
  • ***通过什么方式***网吧
  • .NET 表达式计算:Expression Evaluator
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • @Transactional 竟也能解决分布式事务?
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)