SlideShare a Scribd company logo
1 of 12
并发编程交流 bluedavy 2010-03-19
AboutPPT 对于Java体系而言主要还是借助多线程来做并发 so下面的一切都是多线程相关点,不涉及多进程 资源竞争和一致性 Sun JDK提供的支持 并发包值得学习的地方 尽可能Nonblocking--例子 线程 线程交互 线程池 线程跟踪和问题查找 线程调度 Some tips
资源竞争和一致性 Sun JDK提供的支持 Synchronized Semaphore、 CountdownLatch ReentrantLock、Condition AtomicInteger、ConcurrentHashMap、ArrayBlockingQueue
资源竞争和一致性 并发包值得学习的地方 AtomicInteger系列 CAS ConcurrentHashMap 拆分锁 Semaphore、CountdownLatch 并发包中最强悍的类:AbstractQueuedSynchronizer 基于LockSupport.park和LockSupport.unpark来操控线程是否可被调度 基于队列来做等待 看的也不是非常明白,需要懂的人分享下
尽可能Nonblocking例子 常见代码如下 private static Map<String,Connection> connections=new HashMap<String,Connection>(); public Connection get(String key) throws Exception{ 	synchronized(connections){ 	if(connections.containsKey(key)){ 		return connections.get(key); 	} 	Connection conn=createConnection(key); connections.put(key,conn); 	return conn; 	} }
尽可能Nonblocking例子 改造想法 connections改为ConcurrentHashMap 借助putIfAbsent来减少判断是否存在的lock private static ConcurrentHashMap<String,Connection> connections=new ConcurrentHashMap<String,Connection>(); public Connection get(String key) throws Exception{ 	if(connections.containsKey(key)){ 		return connections.get(key); } Connection conn=createConnection(key); Connection realConn=connections.putIfAbsent(key,conn); if(realConn!=null){ conn.close(); 	} 	 return realConn; }
尽可能Nonblocking例子 改造想法 能否不创建无谓的连接,想到了FutureTask private static ConcurrentHashMap<String,FutureTask<Connection>> connections=new ConcurrentHashMap<String,FutureTask<Connection>>(); public Connection get(final String key) throws Exception{ 	if(connections.containsKey(key)){ 		return connections.get(key).get; } FutureTask<Connection> newTask=new FutureTask<Connection>(new Callable<Connection>(){ 	public Connection call() throws Exception{ 		return createConnection(key); 	} }); FutureTask<Connection> task=connections.putIfAbsent(key,newTask); if(task==null){ newTask.run(); 	return newTask.get(); 	} 	 return task.get(); }
线程 线程交互 wait/notify(notifyAll) 在测kilim一个版本时,高压力的情况下wait/notify貌似有bug,jdk是1.6.0_07 线程池 ThreadPoolExecutor做的已经不错了,但要注意合理使用 不要使用无限制大小的线程池 最好自行实现ThreadFactory,最少给线程加上个前缀 当超过coreSize后,会扔到指定的BlockingQueue中,因此要注意这个地方...
线程 线程跟踪和问题查找 jstack、tda、visualvm jprofiler pstat+jstack直接查找耗cpu的线程
线程调度 最常见的问题在于必须是一个请求占据一个线程,无论这个请求中途是否要去远程访问、文件IO或锁等待; Coroutinemaybe是可以考虑的方案 轻量级线程 基于栈分析保存相关的上下文信息:会多消耗内存 要求整个处理过程中不能有阻塞 意味着锁、数据库访问、网络访问都得处理好 Java中:Scala、Kilim
Some tips 多线程后一定要考虑对资源的消耗,否则搞不好性能反倒更差了 CPU cpu切换是否太严重 内存 内存消耗是否严重,在网络通信中最明显 性能 尽可能Non-Blocking 拆分锁 隔离(ReadWrite) CopyOnWrite,允许读脏数据
并发编程交流

More Related Content

What's hot

Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)wang hongjiang
 
C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术Feng Yu
 
线上问题排查交流
线上问题排查交流线上问题排查交流
线上问题排查交流Edward Lee
 
Jvm基础调优实践(v1.0)
Jvm基础调优实践(v1.0)Jvm基础调优实践(v1.0)
Jvm基础调优实践(v1.0)ddviplinux
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast sharerfyiamcool
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Kris Mok
 
Btrace intro(撒迦)
Btrace intro(撒迦)Btrace intro(撒迦)
Btrace intro(撒迦)ykdsg
 
Java cpu
Java cpuJava cpu
Java cpuykdsg
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战rfyiamcool
 
Exodus重构和向apollo迁移
Exodus重构和向apollo迁移Exodus重构和向apollo迁移
Exodus重构和向apollo迁移wang hongjiang
 
Java7 fork join framework and closures
Java7 fork join framework and closuresJava7 fork join framework and closures
Java7 fork join framework and closureswang hongjiang
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计锐 张
 
MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践zhliji2
 
Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄锐 张
 

What's hot (20)

Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)
 
C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术
 
线上问题排查交流
线上问题排查交流线上问题排查交流
线上问题排查交流
 
Jvm内存管理基础
Jvm内存管理基础Jvm内存管理基础
Jvm内存管理基础
 
JVM及其调优
JVM及其调优JVM及其调优
JVM及其调优
 
Aswan&hump
Aswan&humpAswan&hump
Aswan&hump
 
Jvm基础调优实践(v1.0)
Jvm基础调优实践(v1.0)Jvm基础调优实践(v1.0)
Jvm基础调优实践(v1.0)
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast share
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
 
Ali-tomcat
Ali-tomcatAli-tomcat
Ali-tomcat
 
Btrace intro(撒迦)
Btrace intro(撒迦)Btrace intro(撒迦)
Btrace intro(撒迦)
 
Exodus2 大局观
Exodus2 大局观Exodus2 大局观
Exodus2 大局观
 
Java cpu
Java cpuJava cpu
Java cpu
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战
 
Exodus重构和向apollo迁移
Exodus重构和向apollo迁移Exodus重构和向apollo迁移
Exodus重构和向apollo迁移
 
Java7 fork join framework and closures
Java7 fork join framework and closuresJava7 fork join framework and closures
Java7 fork join framework and closures
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计
 
MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB at Qihoo 360
MongoDB at Qihoo 360
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践
 
Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄
 

Similar to 并发编程交流

000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲ArBing Xie
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7javatwo2011
 
Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTarget Source
 
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 JavaIKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java建興 王
 
并发编程实践
并发编程实践并发编程实践
并发编程实践longhao
 
Java并发核心编程
Java并发核心编程Java并发核心编程
Java并发核心编程wavefly
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训dcshi
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训longhao
 
全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版Simen Li
 
Notes of jcip
Notes of jcipNotes of jcip
Notes of jcipDai Jun
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训flynofry
 
线程与并发
线程与并发线程与并发
线程与并发Tony Deng
 
Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援Justin Lin
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plusDongxu Yao
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)wangjiaz
 
高性能Lamp程序设计 付超群
高性能Lamp程序设计   付超群高性能Lamp程序设计   付超群
高性能Lamp程序设计 付超群Shaoning Pan
 
Java trouble shooting
Java trouble shootingJava trouble shooting
Java trouble shootingMin Zhou
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410maclean liu
 
深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)wang hongjiang
 

Similar to 并发编程交流 (20)

000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
 
Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering Architecture
 
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 JavaIKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java
 
并发编程实践
并发编程实践并发编程实践
并发编程实践
 
Java并发核心编程
Java并发核心编程Java并发核心编程
Java并发核心编程
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训
 
全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版
 
Notes of jcip
Notes of jcipNotes of jcip
Notes of jcip
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训
 
线程与并发
线程与并发线程与并发
线程与并发
 
Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)
 
高性能Lamp程序设计 付超群
高性能Lamp程序设计   付超群高性能Lamp程序设计   付超群
高性能Lamp程序设计 付超群
 
Java trouble shooting
Java trouble shootingJava trouble shooting
Java trouble shooting
 
Java bytecode
Java bytecodeJava bytecode
Java bytecode
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
 
深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)
 

More from bluedavy lin

Java memory problem cases solutions
Java memory problem cases solutionsJava memory problem cases solutions
Java memory problem cases solutionsbluedavy lin
 
Hbase简介与实践分享
Hbase简介与实践分享Hbase简介与实践分享
Hbase简介与实践分享bluedavy lin
 
Sun jdk 1.6 gc english version
Sun jdk 1.6 gc english versionSun jdk 1.6 gc english version
Sun jdk 1.6 gc english versionbluedavy lin
 
OSGi理论与实战
OSGi理论与实战OSGi理论与实战
OSGi理论与实战bluedavy lin
 

More from bluedavy lin (7)

Java memory problem cases solutions
Java memory problem cases solutionsJava memory problem cases solutions
Java memory problem cases solutions
 
Hbase简介与实践分享
Hbase简介与实践分享Hbase简介与实践分享
Hbase简介与实践分享
 
菜鸟看Hbase
菜鸟看Hbase菜鸟看Hbase
菜鸟看Hbase
 
JavaOne summary
JavaOne summaryJavaOne summary
JavaOne summary
 
Sun jdk 1.6 gc english version
Sun jdk 1.6 gc english versionSun jdk 1.6 gc english version
Sun jdk 1.6 gc english version
 
Sun jdk 1.6 gc
Sun jdk 1.6 gcSun jdk 1.6 gc
Sun jdk 1.6 gc
 
OSGi理论与实战
OSGi理论与实战OSGi理论与实战
OSGi理论与实战
 

并发编程交流