- 博客(12)
- 收藏
- 关注
原创 java移位运算符对右侧参数进行模运算
java中int型数据占4字节,每字节是8个二进制位,也就是int型占了32个二进制位。当进行移位运算时,无论左移还是右移,移动超过32位的话,意味着所有的位都移出了,数据变得毫无意义,因此java在int型移位时会先对移位运算符右边的值(需要移动的位数)对32取模,模就是最后要移动的位数。 public static void main(String[] args) { ...
2018-09-20 17:38:24
730
原创 分布式事务之二阶段提交、三阶段提交
分布式系统中的每个节点都能知道自己的事物是成功还是失败,但是不知道其他节点的操作结果。要保证多个节点的事务性,就需要一个中间者来协调这些机器,由中间者来决定事物的提交。2pc和3pc应运而生。 2PC过程如下 中间者向每个节点发送事物请求 每个节点执行事物操作,将undo和redo记录下来,并将自己的执行结果返回给中间者 如果都执行成功,则中间者向各个节点发送提交请求,节点...
2018-09-20 16:47:04
443
原创 Java8之ScheduledThreadPoolExecutor实现原理
ScheduledThreadPoolExecutor是一个可实现定时任务的线程池,ScheduledThreadPoolExecutor内的任务既可以在设定的时间到达时执行一次,也可以相隔固定时间周期执行。ScheduledThreadPoolExecutor继承自ThreadPoolExecutor,关于ThreadPoolExecutor的原理可参考:Java8之ThreadPool...
2018-09-20 16:39:57
1548
原创 Java8之ThreadPoolExecutor实现原理
java线程的创建和销毁是要消耗资源的,Executor就是为了复用线程才设计的,ThreadPoolExecutor是Executor的典型实现,通过下图来简单概述一下ThreadPoolExecutor实现原理ThreadPoolExecutor有一个核心线程池和一个最大线程池,核心线程池内的线程不会因为取不到任务而销毁 提交任务时会先尝试添加核心线程,如果核心线程池没满就添加新的核...
2018-08-07 19:21:11
991
原创 Java8之ConcurrentHashMap实现原理
在java8之前ConcurrentHashMap是使用分段锁来实现并发的,数据结构为hashmap(数组加链表)的基础上再套一层segment数组,锁加在segment元素上。java8实现了粒度更细的加锁,去掉了segment数组,直接使用synchronized锁住hash后得到的数组下标位置中的第一个元素 ,如下图,这样加锁比segment加锁能支持更高的并发量。另外,在java8...
2018-08-05 22:18:30
9165
3
原创 包装实现一个具有重试机制的RestTemplate
工作中经常会遇到某些接口超时、返回的数据不是我们想要的,在这些情况下,可能会要求我们对该接口进行重试,但是有的接口需要重试三次,有的需要重试两次,有的不需要重试;有的返回连接超时才重试,有的读取超时才重试,有的404才重试;有的返回-1才重试,有的返回null才重试;有的超时时间3秒,有的30秒。各种各样的场景需要我们在调用完成后自己判断是否进行重试以及进行几次重试。现在springcloud提供...
2018-06-04 12:26:30
9318
3
原创 zookeeper的watcher机制
zookeeper的分布式订阅/通知功能就是由watcher实现的。利用watcher的通知可以实现许多功能,比如分布式锁、分布式队列。他的实现原理很简单:客户端向某一个节点注册watcher,服务端触发watcher通知到客户端,客户端调用对应watcher的回调方法。下边分析源码:我们先看一下哪些方法里有watcher:1、首先,在创建zookeeper客户端的时候传入了一个watcher的实...
2018-05-03 17:17:18
1910
原创 zookeeper实现分布式锁
分布式锁是分布式系统中对同一个资源访问进行控制的方式。排他锁(写锁):当一个事物对某一个资源加上排他锁后,只有该事物能对这个资源进行读写操作,其余事物只能等待该事物释放这个锁后才能进行操作。zookeeper实现方法:1、所有客户端往一个节点A下创建临时子节点B。创建请求属于事物请求,所有的事物请求都将发送给leader,leader顺序执行写操作,所以能保证只有一个客户端能成功创建子节点B。2、...
2018-04-23 19:02:20
153
原创 zookeeper的zab协议
zookeeper是一个分布式数据一致性的解决方案。我们先来了解一下他的协议原理。zookeeper使用的协议是ZAB(Zookeeper Atomic Broadcast)一致性协议,在ZAB协议之前可以先了解以下几个协议 2PC(二阶段提交) 3PC(三阶段提交) PaxosZAB协议:zab是一种支持崩溃恢复的原子广播协议。zab协议下,主要分为两种角色:leade...
2018-04-22 18:09:35
290
原创 分布式之一致性协议Paxos
Paxos比较难理解,https://www.zhihu.com/question/19787937这篇文章从头推导出了协议,推荐阅读。在这里我简单的拾一下牙慧。首先分两种角色,提议者和接受者(可以为同一个节点),这和2pc、3pc一样。Paxos中变量v达成一致的条件: N个进程中大多数(超过一半) 进程都认为v是同一个值第二、一致性要求的就是某一时刻各个节点达成一致,有两个要...
2018-04-11 17:24:08
387
原创 zookeeper客户端curator之怎么在TestingServer close时不删除文件夹
为了测试一下curator提供的zookeeper服务器TestingServer,照着书上写了如下代码public class TestingServer_Sample { static String path = "/zookeeper"; public static void main(String[] args) throws Exception { ...
2018-04-04 15:56:02
496
原创 springboot2.0下hystrix dashboard Unable to connect to Command Metric Stream解决办法
最近在学习springcloud,实践hystrix dashboard仪表盘的时候,不管是按照书上的还是网上的,都提示Unable to connect to Command Metric Stream。看到这篇文章http://blog.csdn.net/qq_20094989/article/details/79530995说springboot2.0不行,1.5可以,试了一下果然行,那2....
2018-03-21 17:47:58
19789
38
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人