java从入门到项目实战配套资源课程并发编程集合_第1页
java从入门到项目实战配套资源课程并发编程集合_第2页
java从入门到项目实战配套资源课程并发编程集合_第3页
java从入门到项目实战配套资源课程并发编程集合_第4页
java从入门到项目实战配套资源课程并发编程集合_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、讲师:李兴华第21章:JUC并发编程并发集合并发集合 集合是数据结构的系统实现,传统的Java集合大多都属于“非线程安全的” 在JUC中提供了支持高并发的处理类,同时为了保证集合操作的一致性,这些高并发的集合类依然实现了集合标准接口,例如:List、Set、Map、QueueList、Set、Map并发集合Queue并发集合并发集合类No.集合接口集合接口集合类集合类描述描述1ListCopyOnWriteArrayList相当于线程安全的ArrayList,并支持有高并发访问2SetCopyOnWriteArraySet相当于线程安全的HashSet,基于CopyOnWriteArrayLi

2、st实现3ConcurrentSkipListSet相当于线程安全的TreeSet,基于跳表结构实现,并支持高并发4MapConcurrentHashMap相当于线程安全的HashMap,支持高并发访问 5ConcurrentSkipListMap相当于线程安全的TreeMap,基于跳表结构实现,并支持高并发6QueueArrayBlockingQueue基于数组实现的线程安全的有界的阻塞队列7LinkedBlockingQueue单向链表实现的阻塞队列,支持FIFO处理8ConcurrentLinkedQueue单向链表实现的无界队列,支持FIFO处理9DequeLinkedBlocking

3、Deque双向链表实现的双向并发阻塞队列,支持FIFO、FILO处理10ConcurrentLinkedQueue双向链表实现的无界队列,支持FIFO、FILO处理范例:传统集合进行多线程并发访问package cn.mldn.demo;import java.util.ArrayList;import java.util.List;public class JUCDemo public static void main(String args) throws Exception List all = new ArrayList(); / List集合集合for (int num = 0; n

4、um for (int x = 0; x 10; x+) all.add(【 + Thread.currentThread().getName() + 】 );/ 每个线程保存每个线程保存10个数据个数据System.out.println(all);, 集合操作线程集合操作线程- + num).start();范例:使用CopyOnWriteArrayList实现多线程并发访问package cn.mldn.demo;import java.util.List;import java.util.concurrent.CopyOnWriteArrayList;public class JUCD

5、emo public static void main(String args) throws Exception List all = new CopyOnWriteArrayList(); / List集合集合for (int num = 0; num for (int x = 0; x 10; x+) all.add(【 + Thread.currentThread().getName() + 】 );/ 每个线程保存每个线程保存10个个数据数据System.out.println(all);, 集合操作线程集合操作线程- + num).start();范例:使用CopyOnWriteA

6、rraySet操作package cn.mldn.demo;import java.util.Set;import java.util.concurrent.CopyOnWriteArraySet;public class JUCDemo public static void main(String args) throws Exception Set all = new CopyOnWriteArraySet(); / Set集合集合for (int num = 0; num for (int x = 0; x 10; x+) all.add(【 + Thread.currentThread

7、().getName() + 】 );/ 每个线程保存每个线程保存10个数据个数据System.out.println(all);, 集合操作线程集合操作线程- + num).start();ConcurrentHashMap ConcurrentHashMap是线程安全的哈希表实现类,在实现结构中它将哈希表分成许多的片段(Segment),每一个片段中除了保存有哈希数据之外也提供有一个可重用的“互斥锁”,以片段的形式实现多线程的操作ConcurrentHashMap访问形式范例:多线程访问ConcurrentHashMappackage cn.mldn.demo;import java.ut

8、il.Map;import java.util.concurrent.ConcurrentHashMap;public class JUCDemo public static void main(String args) throws Exception Map map = new ConcurrentHashMap();/ Map集合集合for (int num = 0; num for (int x = 0; x 10; x+) map.put( , x);/ 保存信息保存信息System.out.println(map);, 集合操作线程集合操作线程- + num).start(); /

9、 启动线程启动线程跳表 跳表是一种与平衡二叉树性能类似的数据结构,其主要是在有序链表上使用,在JUC提供的集合中有两个支持有跳表操作的集合类型:ConcurrentSkipListMap、ConcurrentSkipListSet范例:使用ConcurrentSkipListMap集合package cn.mldn.demo;import java.util.Map;import java.util.concurrent.ConcurrentSkipListMap;import java.util.concurrent.CountDownLatch;public class JUCDemo p

10、ublic static void main(String args) throws Exception CountDownLatch latch = new CountDownLatch(10) ;/ 同步处理同步处理Map map = new ConcurrentSkipListMap() ;for (int num = 0 ; num for (int x = 0 ; x 10 ; x +) / 保存数据保存数据map.put(【 + Thread.currentThread().getName() + - + x + 】, x);latch.countDown();/ 减少计数减少计数

11、,集合操作线程集合操作线程- + num).start(); latch.await(); / 等待子线程等待子线程System.out.println(map.get(【集合操作线程【集合操作线程-80-8】);/ 数据查询数据查询范例:使用ConcurrentSkipListSet集合package cn.mldn.demo;import java.util.Set;import java.util.concurrent.ConcurrentSkipListSet;import java.util.concurrent.CountDownLatch;public class JUCDemo public static void main(String args) throws Exception CountDownLatch latch = new CountDownLatch(10) ;/ 同步处理同步处理Set set = new ConcurrentSkipListSet() ;for (int num = 0 ; num for (int x = 0 ; x 10 ; x +) set.add(Thread.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论