java多线程编程实践.pdf

java多线程编程实践.pdf

ID:48008619

大小:604.43 KB

页数:21页

时间:2020-01-13

java多线程编程实践.pdf_第1页
java多线程编程实践.pdf_第2页
java多线程编程实践.pdf_第3页
java多线程编程实践.pdf_第4页
java多线程编程实践.pdf_第5页
资源描述:

《java多线程编程实践.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、ConcurrentInJava2011-3-9延昭&陈汝烨ConcurrentInJava1.concurrent包提供的集合1.1ConcurrentHashMap1.2BlockingQueue1.3SynchronousQueue1.4Exchanger1.5CopyOnWriteArrayList和CopyOnWriteArraySet1.6TimeUnit2.ThreadPool2.1ExecutorService接口2.2ThreadPoolExecutor2.3ScheduledExecut

2、orService2.4Executors2.5ExecutorCompletionService3.java.util.concurrent.locks3.1Lock&ReentrantLock3.2ReadWriteLock&ReentrantReadWriteLock4.同步辅助类4.1CountDownLatch4.2CyclicBarrier4.3Semaphoreconcurrent并发包,让你易于编写并发程序。并发下我们经常需要使用的基础设施和解决的问题有ThreadPool、Lock、管道、

3、集合点、线程之间等待和唤醒、线程间数据传输、共享资源访问控制、并发线程之间的相互等待,等待。concurrent提供的工具能够解决绝大部分的场景,还能提高程序吞吐量。现代的服务器多采用多核CPU,从而不同线程之间有可能真正地在同时运行而不是cpu时间切片。在处理大计算量的程序上要尽可能利用CPU多核特性,提高系统吞吐量。并发编程主要面临三个问题:1.如何让多个线程同时为同一个任务工作(并发编程设计)2.多个线程之间对共享资源的争用。3.多个线程之间如何相互合作、传递数据。1.concurrent包提供的集合

4、concurrent包直接提供了标准集合的一些实现,在下面做简单介绍。在大部分情况下可以使用它们提供高并发环境下对集合访问的吞吐量。1.1ConcurrentHashMapMap的一个并发实现。在多线程环境下,它具有很高的吞吐量和具备可靠的数据一致性。它支持并发读和一定程度的并发修改(默认16个并发,可以通过构造函数修改)。HashMap的实现是非线程安全的,高并发下会get方法常会死锁,有的时候会表现为CPU居高不下。publicVget(Objectkey){if(key==null)returnget

5、ForNullKey();inthash=hash(key.hashCode());for(Entrye=table[indexFor(hash,table.length)];e!=null;e=e.next){Objectk;if(e.hash==hash&&((k=e.key)==key

6、

7、key.equals(k)))returne.value;}returnnull;}在get操作里面for循环取对象的操作,由于高并发同时读写,for循环的结果变得不可预知,所以有可能一直循环。所以高并发环

8、境下尽量不要直接使用HashMap,对系统造成的影响很难排除。和Collections.synchronizedMap(newHashMap(...))相比,外ConcurrentHashMap在高并发的环境下有着更优秀的吞吐量。因为ConcurrentHashMap可以支持写并发,基本原理是内部分段,分段的数量决定着并发程度。通过concurrencyLevel参数可以设置。如果你能预期并发数量那么设置该参数可以获取更优吞吐量。另外为ConcurrentHashMap还实现了:VputIfAbsent(K

9、key,Vvalue);booleanremove(Objectkey,Objectvalue);booleanreplace(Kkey,VoldValue,VnewValue);Vreplace(Kkey,Vvalue);这四个一致性的操作方法。1.2BlockingQueueBlockingQueue定义了一个接口,继承了Queue接口。Queue是一种数据结构,意思是它的项以先入先出(FIFO)顺序存储。BlockingQueue为我们提供了一些多线程阻塞语义的方法,新增和重定义了一些方法插入:抛出异

10、常返回的布尔值阻塞超时插入add(e)offer(e)put(e)offer(e,time,unit)移除remove()poll()take()poll(time,unit)检查element()peek()BlockingQueue是线程安全的,非常适合多个生产者和多个消费者线程之间传递数据。形象地理解,BlockingQueue好比有很多格子的传输带系统,不过当你(生产者)调用put方法的时候,如果有空闲的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。