SlideShare uma empresa Scribd logo
1 de 38
JAVA多线程设计模式 by  李学科
热身:非线程安全的原子操作 线程1:longNum=123L 线程2:longNum=456L 结果: longNum=123L longNum=456L longNum=0L longNum=31415926L 原因:long和double是64位的,在不同的系统中有可能被拆成两个32位来运算
SingleThreadedExecution 角色: 资源使用者 共享资源:被多个线程访问的对象 安全方法 非安全方法——使用synchronized加以保护 死锁的前提 有多个共享资源 在一个资源未释放的情况下,去锁定另一个资源 获取共享资源的顺序不固定
SingleThreadedExecution public class Gate {     private String people= "Nobody";     private String address = "Nowhere";     public synchronized void pass(String people) {         //只有一个人通过这扇门     }     public String getGateName() {         //     } }
Immutable 典型代表:String类 例子: public final class Person { privatefinal String name; //no setter     public Person(String name) {         this.name = name; 	}     public String getName() {         return name;     } }
Immutable 特点: 不需要synchronized保护 高效  使用场景: 实例产生后,状态不再发生变化 实例需要共享,且访问频繁 设计思想:String和StringBuffer 可变和不变解耦 二者可互相切换
GuardedSuspension
GuardedSuspension 	public synchronized Request getRequest() {         while (queue.size() <= 0) {	//guard condition             try {                                                    wait();             } catch (InterruptedException e) {                   }                                                }                                                    return (Request)queue.removeFirst();     }     public synchronized void putRequest(Request request) { queue.addLast(request); notifyAll();     }
GuardedSuspension 升级版的SingleThreadedExecution 有一个保护的对象 不满足警戒条件则等待 提供可以通过警戒条件的方法
Balking
Balking public class Data {     private boolean changed;      public synchronized void change(String newContent) {                 content = newContent;                                            changed = true;                                                }                                                                public synchronized void save() throws IOException {               if (!changed) {// 内容没有变化,返回 		return;                                                      }                                                        doSave(); //实际资料储存到挡案里用的方法         changed = false;                                               }  }
Balking 使用场景 不需要刻意执行(doSave) 不想等待警戒条件变化 警戒条件只有第一次成立,如下 private boolean done; public synchronized void init(){ if (done) { 	return; } doInit(); 		done=true; }
在Balking与GuardedSuspension之间					——timeout wait何时结束 当notify方法执行时 当notifyAll方法执行时 当interrupt方法执行时 当timeout时 synchronized没有timeout,也不能中断(死锁)
ProducerConsumer
ProducerConsumer
ProducerConsumer public class Table {     private final String[] buffer;     private int count; // buffer内的蛋糕数 public synchronized void put(String cake) throws InterruptedException { while (count >= buffer.length) {  wait(); } 	  //加一块蛋糕 notifyAll();     }     public synchronized String take() throws InterruptedException { while (count <= 0) {wait(); } notifyAll(); 	 return cake; //减一块蛋糕     } }
ProducerConsumer 设计思想 线程安全部分的解耦 生产者和消费者的快速响应 可以给缓冲区数据安排顺序 考虑缓冲区的负荷
Thread-Per-Message     private final Helper helper = new Helper();     public void request(final int p1, final char p2) {         new Thread() {             public void run() { helper.handle(p1, p2);             }         }.start();     }
Thread-Per-Message 特点 提升响应性,降低延迟时间 对操作顺序无要求 不需要返回值
调用与执行分离 提高响应性:如果执行时间长,调用的操作受牵连 控制顺序:如果不分离,谁先调用先执行,分离后,执行顺序变得可控 可取消和可重复执行:在调用和执行的时间差内,可以取消。调用后,产生工作的实例,可以针对一份工作,多次执行 可分布式处理
Future
Future public Data create(final int param1, final char param1) { 	   // (1) 建立FutureData的实体         final FutureData future = new FutureData();         // (2) 为了建立RealData的实体,启动新的线程         new Thread() {                                                   public void run() {                              RealDatarealdata = new RealData(param1, param2); future.setRealData(realdata);             }                                                        }.start();                                                   // (3)返回FutureData实体         return future;     }
Future public class RealData implements Data {     private final String content;     public RealData(int param1, char param2) { //do something, burn time this.content = new String(buffer);     }     public String getContent() {         return content;     } }
Future public class FutureData implements Data {     private RealDatarealdata = null;     private booleanready = false;     public synchronized void setRealData(RealDatarealdata) {         if (ready)  return;     // balking this.realdata = realdata; this.ready= true; notifyAll();     }     public synchronized String getContent() {         while (!ready) {     //garded             try {   wait();     } catch (InterruptedException e) { }         }         return realdata.getContent();     } }
Callback与Future
Future 特点 使用数据和准备数据的分离 Thinking 数据有多种状态? FutureCreater的安全性 Future模式一定会提高效率吗?
つづく
选修《Matrix》前传+番外篇Animatrix
Animatrix 名字由来:通常,Ani是英文单词“动画animation”的缩写,但在这里,它却代表着日文中的“动漫anime”。 《黑客帝国动画版》由9段以《黑客帝国》系列电影世界观为基础生发出的短片组成,各篇的角度与风格各异,制作班底汇聚了日本、美国、韩国三地的动画精英。
The Final Flight of the Osiris 剧本:沃卓斯基兄弟 导演:安迪·琼斯Andy Jones(《最终幻想》)  动画设计与制作:SQUARE公司  片长:11:00
The Final Flight of the Osiris
The Second Renaissance 剧本:沃卓斯基兄弟 导演:前田真宏 (《青之6号》)  动画设计与制作:摄氏4度工作室,东京 片长:8:23
The Second Renaissance
The Second Renaissance
Beyond 剧本/导演:森本晃司 动画设计与制作:摄氏4度工作室,东京  片长:12:48  内容简要:在一栋神秘的大楼里,似乎各种不可思议的事情都可发生,它究竟有什么秘密?这是不是通往真实世界的出口?MATRIX密探们当然不会就此忽视,他们要极力修补这个漏洞……
Beyond
Beyond
Java多线程设计模式

Mais conteúdo relacionado

Mais procurados

分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计zhujiadun
 
Row Set初步学习V1.1
Row Set初步学习V1.1Row Set初步学习V1.1
Row Set初步学习V1.1Zianed Hou
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训longhao
 
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理maclean liu
 
180518 ntut js and node
180518 ntut js and node180518 ntut js and node
180518 ntut js and nodePeter Yi
 
使用 Spark 計算 differential expression
使用 Spark 計算 differential expression使用 Spark 計算 differential expression
使用 Spark 計算 differential expressionDrake Huang
 
Hash map导致cpu100% 的分析
Hash map导致cpu100% 的分析Hash map导致cpu100% 的分析
Hash map导致cpu100% 的分析wang hongjiang
 
线程与并发
线程与并发线程与并发
线程与并发Tony Deng
 
线程编程方面
线程编程方面线程编程方面
线程编程方面yiditushe
 
并发编程实践
并发编程实践并发编程实践
并发编程实践longhao
 
基于Eclipse和hadoop平台应用开发入门手册
基于Eclipse和hadoop平台应用开发入门手册基于Eclipse和hadoop平台应用开发入门手册
基于Eclipse和hadoop平台应用开发入门手册Zhen Li
 
丁原:海量数据迁移方案
丁原:海量数据迁移方案丁原:海量数据迁移方案
丁原:海量数据迁移方案YANGL *
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应zhaolinjnu
 
Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Cabin WJ
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型keelii
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验QLeelulu
 
Network and Multitasking
Network and MultitaskingNetwork and Multitasking
Network and Multitaskingyarshure Kong
 

Mais procurados (20)

分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计
 
Row Set初步学习V1.1
Row Set初步学习V1.1Row Set初步学习V1.1
Row Set初步学习V1.1
 
Zoo keeper
Zoo keeperZoo keeper
Zoo keeper
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训
 
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
 
180518 ntut js and node
180518 ntut js and node180518 ntut js and node
180518 ntut js and node
 
使用 Spark 計算 differential expression
使用 Spark 計算 differential expression使用 Spark 計算 differential expression
使用 Spark 計算 differential expression
 
Hash map导致cpu100% 的分析
Hash map导致cpu100% 的分析Hash map导致cpu100% 的分析
Hash map导致cpu100% 的分析
 
Zoo keeper
Zoo keeperZoo keeper
Zoo keeper
 
线程与并发
线程与并发线程与并发
线程与并发
 
sorting
sortingsorting
sorting
 
线程编程方面
线程编程方面线程编程方面
线程编程方面
 
并发编程实践
并发编程实践并发编程实践
并发编程实践
 
基于Eclipse和hadoop平台应用开发入门手册
基于Eclipse和hadoop平台应用开发入门手册基于Eclipse和hadoop平台应用开发入门手册
基于Eclipse和hadoop平台应用开发入门手册
 
丁原:海量数据迁移方案
丁原:海量数据迁移方案丁原:海量数据迁移方案
丁原:海量数据迁移方案
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应
 
Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
 
Network and Multitasking
Network and MultitaskingNetwork and Multitasking
Network and Multitasking
 

Destaque

Vilesoft - Franquia Home Based
Vilesoft - Franquia Home BasedVilesoft - Franquia Home Based
Vilesoft - Franquia Home BasedVilesoft
 
Relatório das entrevistas
Relatório das entrevistasRelatório das entrevistas
Relatório das entrevistasMusicFightz
 
How To: Bypass CPalead surveys?
How To: Bypass CPalead surveys?How To: Bypass CPalead surveys?
How To: Bypass CPalead surveys?juliukazz
 
Abrindo Portas 1 Com Som
Abrindo Portas  1   Com SomAbrindo Portas  1   Com Som
Abrindo Portas 1 Com Somguest0c3af4
 
www.AulasDeMatematicanoRJ.Com.Br -Matemática - Logaritmo
 www.AulasDeMatematicanoRJ.Com.Br  -Matemática -  Logaritmo www.AulasDeMatematicanoRJ.Com.Br  -Matemática -  Logaritmo
www.AulasDeMatematicanoRJ.Com.Br -Matemática - LogaritmoClarice Leclaire
 
GARANTIAS FINANCEIRAS ANS
GARANTIAS FINANCEIRAS ANSGARANTIAS FINANCEIRAS ANS
GARANTIAS FINANCEIRAS ANSJoaquim Wilmar
 
Cpfl energia gerando valor contínuo sr. augusto rodrigues
Cpfl energia gerando valor contínuo   sr. augusto rodriguesCpfl energia gerando valor contínuo   sr. augusto rodrigues
Cpfl energia gerando valor contínuo sr. augusto rodriguesCPFL RI
 
Crescimento Geometrico
Crescimento GeometricoCrescimento Geometrico
Crescimento Geometricounesp
 
Estrategias exitosas de email marketing
Estrategias exitosas de email marketingEstrategias exitosas de email marketing
Estrategias exitosas de email marketingJuan Gigli
 
Manual de Páginas do Facebook
Manual de Páginas do FacebookManual de Páginas do Facebook
Manual de Páginas do FacebookTudo Traduzido
 
Ap. reprodutor masculino (Xmedunir)
Ap. reprodutor masculino (Xmedunir)Ap. reprodutor masculino (Xmedunir)
Ap. reprodutor masculino (Xmedunir)Carla Cechinel
 

Destaque (20)

O globo
O globoO globo
O globo
 
Vilesoft - Franquia Home Based
Vilesoft - Franquia Home BasedVilesoft - Franquia Home Based
Vilesoft - Franquia Home Based
 
Curso de Msdos vol2
Curso de Msdos vol2Curso de Msdos vol2
Curso de Msdos vol2
 
Relatório das entrevistas
Relatório das entrevistasRelatório das entrevistas
Relatório das entrevistas
 
How To: Bypass CPalead surveys?
How To: Bypass CPalead surveys?How To: Bypass CPalead surveys?
How To: Bypass CPalead surveys?
 
Abrindo Portas 1 Com Som
Abrindo Portas  1   Com SomAbrindo Portas  1   Com Som
Abrindo Portas 1 Com Som
 
Edicao 83
Edicao 83Edicao 83
Edicao 83
 
www.AulasDeMatematicanoRJ.Com.Br -Matemática - Logaritmo
 www.AulasDeMatematicanoRJ.Com.Br  -Matemática -  Logaritmo www.AulasDeMatematicanoRJ.Com.Br  -Matemática -  Logaritmo
www.AulasDeMatematicanoRJ.Com.Br -Matemática - Logaritmo
 
GARANTIAS FINANCEIRAS ANS
GARANTIAS FINANCEIRAS ANSGARANTIAS FINANCEIRAS ANS
GARANTIAS FINANCEIRAS ANS
 
Horus ERP para pymes
Horus ERP para pymesHorus ERP para pymes
Horus ERP para pymes
 
Edicao 84
Edicao 84Edicao 84
Edicao 84
 
Cpfl energia gerando valor contínuo sr. augusto rodrigues
Cpfl energia gerando valor contínuo   sr. augusto rodriguesCpfl energia gerando valor contínuo   sr. augusto rodrigues
Cpfl energia gerando valor contínuo sr. augusto rodrigues
 
Jornal do sertao 88 web
Jornal do sertao 88 webJornal do sertao 88 web
Jornal do sertao 88 web
 
ComunicaçãO
ComunicaçãOComunicaçãO
ComunicaçãO
 
Clima organizacional
Clima organizacionalClima organizacional
Clima organizacional
 
Potência em ca
Potência em ca  Potência em ca
Potência em ca
 
Crescimento Geometrico
Crescimento GeometricoCrescimento Geometrico
Crescimento Geometrico
 
Estrategias exitosas de email marketing
Estrategias exitosas de email marketingEstrategias exitosas de email marketing
Estrategias exitosas de email marketing
 
Manual de Páginas do Facebook
Manual de Páginas do FacebookManual de Páginas do Facebook
Manual de Páginas do Facebook
 
Ap. reprodutor masculino (Xmedunir)
Ap. reprodutor masculino (Xmedunir)Ap. reprodutor masculino (Xmedunir)
Ap. reprodutor masculino (Xmedunir)
 

Semelhante a Java多线程设计模式

由一个简单的程序谈起――之五(精华)
由一个简单的程序谈起――之五(精华)由一个简单的程序谈起――之五(精华)
由一个简单的程序谈起――之五(精华)yiditushe
 
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code cleanmacrochen
 
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutorInside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutorAdy Liu
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非Tony Deng
 
由一个简单的程序谈起――之二
由一个简单的程序谈起――之二由一个简单的程序谈起――之二
由一个简单的程序谈起――之二yiditushe
 
Java并发核心编程
Java并发核心编程Java并发核心编程
Java并发核心编程wavefly
 
Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援Justin Lin
 
由一个简单的程序谈起--之四
由一个简单的程序谈起--之四由一个简单的程序谈起--之四
由一个简单的程序谈起--之四yiditushe
 
《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)jane2006
 
六步教你学会简单Rmi
六步教你学会简单Rmi六步教你学会简单Rmi
六步教你学会简单Rmiyiditushe
 
Js的国(转载)
Js的国(转载)Js的国(转载)
Js的国(转载)Leo Hui
 
由一个简单的程序谈起――之三(精华)
由一个简单的程序谈起――之三(精华)由一个简单的程序谈起――之三(精华)
由一个简单的程序谈起――之三(精华)yiditushe
 
所谓闭包
所谓闭包所谓闭包
所谓闭包youzitang
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题yiditushe
 
高效能執行緒
高效能執行緒高效能執行緒
高效能執行緒Rick Wu
 
Ejb工作原理学习笔记
Ejb工作原理学习笔记Ejb工作原理学习笔记
Ejb工作原理学习笔记yiditushe
 
所谓闭包
所谓闭包所谓闭包
所谓闭包ilovey4
 

Semelhante a Java多线程设计模式 (20)

由一个简单的程序谈起――之五(精华)
由一个简单的程序谈起――之五(精华)由一个简单的程序谈起――之五(精华)
由一个简单的程序谈起――之五(精华)
 
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code clean
 
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutorInside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非
 
Java物件導向
Java物件導向Java物件導向
Java物件導向
 
由一个简单的程序谈起――之二
由一个简单的程序谈起――之二由一个简单的程序谈起――之二
由一个简单的程序谈起――之二
 
Java并发核心编程
Java并发核心编程Java并发核心编程
Java并发核心编程
 
Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援
 
JS2
JS2JS2
JS2
 
由一个简单的程序谈起--之四
由一个简单的程序谈起--之四由一个简单的程序谈起--之四
由一个简单的程序谈起--之四
 
《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)
 
六步教你学会简单Rmi
六步教你学会简单Rmi六步教你学会简单Rmi
六步教你学会简单Rmi
 
Js的国(转载)
Js的国(转载)Js的国(转载)
Js的国(转载)
 
Sun java
Sun javaSun java
Sun java
 
由一个简单的程序谈起――之三(精华)
由一个简单的程序谈起――之三(精华)由一个简单的程序谈起――之三(精华)
由一个简单的程序谈起――之三(精华)
 
所谓闭包
所谓闭包所谓闭包
所谓闭包
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题
 
高效能執行緒
高效能執行緒高效能執行緒
高效能執行緒
 
Ejb工作原理学习笔记
Ejb工作原理学习笔记Ejb工作原理学习笔记
Ejb工作原理学习笔记
 
所谓闭包
所谓闭包所谓闭包
所谓闭包
 

Mais de Tony Deng

一页纸项目管理
一页纸项目管理一页纸项目管理
一页纸项目管理Tony Deng
 
Docker at the gate
Docker at the gateDocker at the gate
Docker at the gateTony Deng
 
《我们如何工作》—质量保障
《我们如何工作》—质量保障《我们如何工作》—质量保障
《我们如何工作》—质量保障Tony Deng
 
《我们如何工作》- 产品经理和工程师如何有效沟通
《我们如何工作》- 产品经理和工程师如何有效沟通《我们如何工作》- 产品经理和工程师如何有效沟通
《我们如何工作》- 产品经理和工程师如何有效沟通Tony Deng
 
我们为何工作--找到正确的工作方式
我们为何工作--找到正确的工作方式我们为何工作--找到正确的工作方式
我们为何工作--找到正确的工作方式Tony Deng
 
漫谈职业规划
漫谈职业规划漫谈职业规划
漫谈职业规划Tony Deng
 
一次Http请求过程分析
一次Http请求过程分析一次Http请求过程分析
一次Http请求过程分析Tony Deng
 
一次Code review引发的思考
一次Code review引发的思考一次Code review引发的思考
一次Code review引发的思考Tony Deng
 
My sql迁移总结
My sql迁移总结My sql迁移总结
My sql迁移总结Tony Deng
 
一次项目的探险旅程
一次项目的探险旅程一次项目的探险旅程
一次项目的探险旅程Tony Deng
 
Scrum敏捷开发模型
Scrum敏捷开发模型Scrum敏捷开发模型
Scrum敏捷开发模型Tony Deng
 
Shoutv 冯晓东
Shoutv 冯晓东Shoutv 冯晓东
Shoutv 冯晓东Tony Deng
 
技术债务的形成
技术债务的形成技术债务的形成
技术债务的形成Tony Deng
 
我们不了解的计算机世界(二)
我们不了解的计算机世界(二)我们不了解的计算机世界(二)
我们不了解的计算机世界(二)Tony Deng
 
我们不了解的计算机世界(一)--Unix目录结构的来历
我们不了解的计算机世界(一)--Unix目录结构的来历我们不了解的计算机世界(一)--Unix目录结构的来历
我们不了解的计算机世界(一)--Unix目录结构的来历Tony Deng
 
实时任务调度
实时任务调度实时任务调度
实时任务调度Tony Deng
 
节约内存:Instagram的redis实践
节约内存:Instagram的redis实践节约内存:Instagram的redis实践
节约内存:Instagram的redis实践Tony Deng
 

Mais de Tony Deng (20)

一页纸项目管理
一页纸项目管理一页纸项目管理
一页纸项目管理
 
Docker at the gate
Docker at the gateDocker at the gate
Docker at the gate
 
《我们如何工作》—质量保障
《我们如何工作》—质量保障《我们如何工作》—质量保障
《我们如何工作》—质量保障
 
《我们如何工作》- 产品经理和工程师如何有效沟通
《我们如何工作》- 产品经理和工程师如何有效沟通《我们如何工作》- 产品经理和工程师如何有效沟通
《我们如何工作》- 产品经理和工程师如何有效沟通
 
我们为何工作--找到正确的工作方式
我们为何工作--找到正确的工作方式我们为何工作--找到正确的工作方式
我们为何工作--找到正确的工作方式
 
SDN介绍
SDN介绍SDN介绍
SDN介绍
 
漫谈职业规划
漫谈职业规划漫谈职业规划
漫谈职业规划
 
一次Http请求过程分析
一次Http请求过程分析一次Http请求过程分析
一次Http请求过程分析
 
图解Git
图解Git图解Git
图解Git
 
一次Code review引发的思考
一次Code review引发的思考一次Code review引发的思考
一次Code review引发的思考
 
My sql迁移总结
My sql迁移总结My sql迁移总结
My sql迁移总结
 
一次项目的探险旅程
一次项目的探险旅程一次项目的探险旅程
一次项目的探险旅程
 
Scrum敏捷开发模型
Scrum敏捷开发模型Scrum敏捷开发模型
Scrum敏捷开发模型
 
Shoutv 冯晓东
Shoutv 冯晓东Shoutv 冯晓东
Shoutv 冯晓东
 
技术债务的形成
技术债务的形成技术债务的形成
技术债务的形成
 
我们不了解的计算机世界(二)
我们不了解的计算机世界(二)我们不了解的计算机世界(二)
我们不了解的计算机世界(二)
 
HBase
HBaseHBase
HBase
 
我们不了解的计算机世界(一)--Unix目录结构的来历
我们不了解的计算机世界(一)--Unix目录结构的来历我们不了解的计算机世界(一)--Unix目录结构的来历
我们不了解的计算机世界(一)--Unix目录结构的来历
 
实时任务调度
实时任务调度实时任务调度
实时任务调度
 
节约内存:Instagram的redis实践
节约内存:Instagram的redis实践节约内存:Instagram的redis实践
节约内存:Instagram的redis实践
 

Java多线程设计模式