zookeeper分布式集群Curator的分布式long型计数器DistributedAtomicLong(1)
现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更
最后
现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!
Android架构师之路很漫长,一起共勉吧!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
}
}
private void zk() throws Exception {
//任意位置的SharedCount,只要使用相同的path,都可以得到这个计数值。
String path = “/path/count”;
CuratorFramework client = initClient(path);
//分布式集群中存在的某一处计数。
//DistributedAtomicLong baseCount = new DistributedAtomicLong(client, path, new ExponentialBackoffRetry(1000, 3));
//baseCount.trySet(0L);
//开启COUNT个线程,模拟对分布式中SharedCount的不同节点的赋值操作。
ExecutorService service = Executors.newFixedThreadPool(COUNT);
for (int i = 0; i < COUNT; i++) {
DistributedAtomicLong count = new DistributedAtomicLong(client, path, new RetryNTimes(10, 10));
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
TimeUnit.SECONDS.sleep((long) (Math.random() * TIME));
setValue(count);
} catch (Exception e) {
e.printStackTrace();
}
}
};
service.submit(runnable);
}
service.shutdown();
service.awaitTermination(TIME, TimeUnit.SECONDS);
}
private synchronized void setValue(DistributedAtomicLong count) throws Exception {
System.out.println(“-------------”);
System.out.println(“当前值=” + count.get().preValue());
long l = (long) (Math.random() * 1000);
System.out.println(“尝试赋值:” + l);
AtomicValue result = count.trySet(l);
if (result.succeeded()) {
System.out.println(result.postValue() + “设置成功”);
System.out.println(result.preValue() + “->” + result.postValue());
} else {
System.out.println(result.postValue() + “设置失败”);
System.out.println(“计数器仍是旧值:” + result.preValue());
}
}
private CuratorFramework initClient(String path) throws Exception {
CuratorFramework client = makeClient();
client.start();
boolean b = isPathExist(client, path);
//如果不存在这个路径,stat为null,创建新的节点路径。
if (!b) {
String s = client.create()
.creatingParentsIfNeeded()
.withMode(CreateMode.PERSISTENT)
.forPath(path);
System.out.println("创建 " + s);
} else {
System.out.println(“已存在:” + path + “,不需重复创建”);
}
return client;
}
//检测是否存在该路径。
private boolean isPathExist(CuratorFramework client, String path) {
boolean b = false;
//检测是否存在该路径。
try {
Stat stat = client.checkExists().forPath(path);
b = stat == null ? false : true;
} catch (Exception e) {
e.printStackTrace();
}
return b;
}
private CuratorFramework makeClient() {
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 5);
CuratorFramework client = CuratorFrameworkFactory.builder()
.connectString(getAddress())
.sessionTimeoutMs(10 * 1000)
.connectionTimeoutMs(20 * 1000)
.retryPolicy(retryPolicy)
.build();
return client;
}
private String getAddress() {
String ip = “127.0.0.1”;
return ip + “:2181,” + ip + “:2182,” + ip + “:2183”;
}
}
输出:
创建 /path/count
当前值=3546358405553139250
资源分享
- 最新大厂面试专题
这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等
- 对应导图的Android高级工程师进阶系统学习视频
最近热门的,NDK,热修复,MVVM,源码等一系列系统学习视频都有!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
…(img-KqCrgbaW-1715269972862)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
更多推荐
所有评论(0)