想成为分布式高手?那就先把协议和算法烂熟于心吧!这就不得不提到著名的——《分布式高可用算法》! 目前网上还没有开源版本,今天我就当一次“互联网雷锋” ,免费获取方式我放在文末了
作者介绍
江峰,教授级高工,中国电信集团云计算专业首席专家,中国计算机学会信息存储专委会委员。长期在分布式存储领域从事理论研究和工程实践工作。
以第一作者在国际期刊会议上发表论文多篇,以第一发明人申请专利十多件,以第一完成人获得省部级、中国电信集团科技进步奖多次。
分布式高可用算法
长期以来,在996的工作压力下,工程师们更重视实践中的技巧,力求快速解决眼前的问题,而鲜有时间关注问题背后的底层原理。但实际上,这样容易形成“头疼医头,脚疼医脚”的思维和工作方式,难以根治工程中的问题,无法透彻地剖析系统工程,从而埋下了众多隐患。
《分布式高可用算法》结合作者在本领域十余年的丰富实践,不仅剖析了经典算法背后的逻辑,而且深入浅出地分析了每个经典算法在实践中的应用思路,让人知其然并知其所以然,举一反三
《分布式高可用算法》在表达上通俗易懂,即便是刚入门的新手,读完本书也能有“哦,原来是这样!”的体会;对于已在本领域工作多年的工程师,相信在读完本书之后,也会有豁然开朗的感觉,领悟到算法的精妙之处,从而更好地指导工作。
来看看目录吧
部分内容展示
-
首先介绍了分布式系统是如何被建模的,以及分布式算法是如何被描述的
-
然后从基础的链路抽象开始逐步增加复杂度,最终将复杂的共识抽象以简单的方式呈现在读者面前
通过阅读本书,读者不仅可以掌握常用的分布式算法,还可以学到分布式算法的证明方法及适用条件,为自行设计分布式系统和算法打下坚实的基础。
如果恰好你需要的话可以 关注 公众号:Java收藏夹
死锁
package com.waylau.java.demo.concurrency;
public class Deadlock {
public static void main(String[] args) {
final Friend alphonse = new Friend("Alphonse");
final Friend gaston = new Friend("Gaston");
new Thread(new Runnable() {
public void run() {
alphonse.bow(gaston);
}
}).start();
new Thread(new Runnable() {
public void run() {
gaston.bow(alphonse);
}
}).start();
}
static class Friend {
private final String name;
public Friend(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public synchronized void bow(Friend bower) {
System.out.format("%s: %s" + " has bowed to me!%n",
this.name, bower.getName());
bower.bowBack(this);
}
public synchronized void bowBack(Friend bower) {
System.out.format("%s: %s" + " has bowed back to me!%n",
this.name, bower.getName());
}
}
}
当它们尝试调用bowBack时两个线程将被阻塞。无论是哪个线程, 都永远不会结束,因为每个线程都在等待对方鞠躬。这就是死锁了。