SlideShare a Scribd company logo
JAVA多线程设计模式by  李学科
热身:非线程安全的原子操作线程1:longNum=123L线程2:longNum=456L结果:longNum=123LlongNum=456LlongNum=0LlongNum=31415926L原因:long和double是64位的,在不同的系统中有可能被拆成两个32位来运算
SingleThreadedExecution角色:资源使用者共享资源:被多个线程访问的对象安全方法非安全方法——使用synchronized加以保护死锁的前提有多个共享资源在一个资源未释放的情况下,去锁定另一个资源获取共享资源的顺序不固定
SingleThreadedExecutionpublic 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
Balkingpublic 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之间					——timeoutwait何时结束当notify方法执行时当notifyAll方法执行时当interrupt方法执行时当timeout时synchronized没有timeout,也不能中断(死锁)
ProducerConsumer
ProducerConsumer
ProducerConsumerpublic 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
Futurepublic 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;    }
Futurepublic class RealData implements Data {    private final String content;    public RealData(int param1, char param2) {//do something, burn timethis.content = new String(buffer);    }    public String getContent() {        return content;    }}
Futurepublic class FutureData implements Data {    private RealDatarealdata = null;    private booleanready = false;    public synchronized void setRealData(RealDatarealdata) {        if (ready)  return;     // balkingthis.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多线程设计模式

More Related Content

PPT
Enqueue Lock介绍.ppt
DOC
Java多线程:驾驭Synchronize的方法
PDF
Java Thread
DOC
Java多线程编程详解
PPT
JAVA内存泄漏及诊断
PDF
Jni攻略之八――操作对象的构造方法
DOC
深入剖析Concurrent hashmap中的同步机制(上)
PDF
分布式系统缓存设计
Enqueue Lock介绍.ppt
Java多线程:驾驭Synchronize的方法
Java Thread
Java多线程编程详解
JAVA内存泄漏及诊断
Jni攻略之八――操作对象的构造方法
深入剖析Concurrent hashmap中的同步机制(上)
分布式系统缓存设计

What's hot (20)

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

Viewers also liked (20)

PDF
PDF
Vilesoft - Franquia Home Based
DOC
Curso de Msdos vol2
ODT
Relatório das entrevistas
PPTX
How To: Bypass CPalead surveys?
PPS
Abrindo Portas 1 Com Som
PDF
Edicao 83
PPT
www.AulasDeMatematicanoRJ.Com.Br -Matemática - Logaritmo
PDF
GARANTIAS FINANCEIRAS ANS
PDF
Horus ERP para pymes
PDF
Edicao 84
PDF
Cpfl energia gerando valor contínuo sr. augusto rodrigues
PDF
Jornal do sertao 88 web
PPT
ComunicaçãO
PDF
Clima organizacional
PPT
Potência em ca
PDF
Crescimento Geometrico
PPT
Estrategias exitosas de email marketing
PDF
Manual de Páginas do Facebook
PPT
Ap. reprodutor masculino (Xmedunir)
Vilesoft - Franquia Home Based
Curso de Msdos vol2
Relatório das entrevistas
How To: Bypass CPalead surveys?
Abrindo Portas 1 Com Som
Edicao 83
www.AulasDeMatematicanoRJ.Com.Br -Matemática - Logaritmo
GARANTIAS FINANCEIRAS ANS
Horus ERP para pymes
Edicao 84
Cpfl energia gerando valor contínuo sr. augusto rodrigues
Jornal do sertao 88 web
ComunicaçãO
Clima organizacional
Potência em ca
Crescimento Geometrico
Estrategias exitosas de email marketing
Manual de Páginas do Facebook
Ap. reprodutor masculino (Xmedunir)
Ad

Similar to Java多线程设计模式 (20)

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

More from Tony Deng (20)

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

Java多线程设计模式