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

Contenu connexe

Tendances

分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计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
 

Tendances (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
 

En vedette

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
 

En vedette (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)
 

Similaire à 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
 

Similaire à 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工作原理学习笔记
 
所谓闭包
所谓闭包所谓闭包
所谓闭包
 

Plus 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
 

Plus 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多线程设计模式

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.