欢迎来到天天文库
浏览记录
ID:20790917
大小:982.44 KB
页数:43页
时间:2018-10-15
《java并发编程分享》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、高嵩2013-05-02V0.12013-12-12V0.2Java并发编程分享大纲并发编程概述JMM(JavaMemoryModel)概述可见性有序性并发工具监控与跟踪为什么要学习并发编程?充分利用服务器资源提高服务吞吐量、降低响应时间爬虫、WebServer、日志分析……分布式系统资源的争用、可伸缩性多线程的优点多线程的代价设计更复杂资源共享、数据一致性及可见性、调试困难性能开销锁、上下文切换内存开销贸然进行的性能优化顺序IOvs随机IO的例子问题所有内存都是共享的吗?栈上分配的变量是线程安全的共享内存一定不是线程安全的吗?不一定,正确的同步or
2、不可变对象or线程级别的资源锁的是谁?试试回答这些问题还有一题:大纲并发编程概述JMM(JavaMemoryModel)概述可见性有序性并发工具监控与跟踪JMM-抽象模型SandyBridge内存模型JMM-线程间通讯大纲并发编程概述JMM(JavaMemoryModel)概述可见性有序性并发工具监控与跟踪问题:可见性?写boolean型对其它线程马上可见吗?VisibilityTest1.java写引用对其它线程马上可见吗?VisibilityTest2.java12安全发布对象This溢出的例子VisibilityTest3.java避免this
3、溢出VisibilityTest4.java13大纲并发编程概述JMM(JavaMemoryModel)概述可见性有序性并发工具监控与跟踪问题:有序性?代码顺序=程序执行顺序?单线程没有数据依赖的话:允许重排序多线程整体无序:i++线程内重排序:下面的例子线程间看到的顺序也不一致(可见性导致)理想情况是什么?顺序一致性模型JMM-顺序一致性理想情况:正确同步下的真实情况JMM-重排序例1:ReorderTest1.javaJMM-重排序例2:ReorderTest2.java/ReorderTest3.javaWriteThread:写-写ReadT
4、hread:读-读JMM-重排序写-写重排序JMM-重排序读-读重排序JMM-重排序不同处理器上的重排序规则JMM-重排序难以测试的原因测试环境和生产环境的JVM版本/硬件配置的不同不同生产环境的JVM版本/硬件配置的不同23大纲并发编程概述JMM(JavaMemoryModel)概述可见性有序性并发工具监控与跟踪并发编程带来的问题不能保证原子性JMM提供最低安全性,除了long/double不能保证可见性各个CPU独享的工作内存不能保证有序性并发工具不可变类线程独享资源synchronized(代码块、实例方法、静态方法)volatile(实例变量
5、、静态变量)CASj.u.c26synchronized锁的原理任何对象都有一个monitor(监视器/管程)与之关联,当且一个monitor被持有后,它将处于锁定状态。27synchronizedsynchronized可以做到:可重入、互斥性、可见性synchronized不能做到:等待超时、可中断、公平性28可见性如何保证?JMMhappens-before规则线程中上一个动作及之前的所有写操作在该线程执行下一个动作时对该线程可见如果线程1解锁了monitora,接着线程2锁定了a,那么,线程1解锁a之前的写操作都对线程2可见happends-
6、before有传递性如何应用happens-before29volatilevolatile可以做到:原子性、可见性volatile不能做到:复合操作的原子性:TestVolatile.javavolatile引用指向对象属性/数组元素的可见性volatile提供:与锁一致的语义,并且比锁的开销小可见性如何保证?happened-before规则:如果线程1写入了volatile变量v,接着线程2读取了v,那么,线程1写入v及之前的写操作都对线程2可见改造VisibilityTest2.java/ReorderTest3.java31CompareA
7、ndSwap32AtomicInteger:publicfinalintgetAndAdd(intdelta){for(;;){intcurrent=get();intnext=current+delta;if(compareAndSet(current,next))returncurrent;}}CompareAndSwapCAS可以做到:原子性、可见性CAS的优点:无锁的复合操作CAS的缺点:竞争激烈的情况下耗费CPU33CAS的使用场景引用替换AtomicReference状态记录AtomicBoolean统计AtomicInteger/Ato
8、micIntegerArrayAtomicLong/AtomicLongArray34java.util.c
此文档下载收益归作者所有