1、List接口:ArrayList 和 Vector

  ArrayList不是线程安全的,Vector是线程安全的,Vector有一个子类,可实现后进先出(LIFO)的对象堆栈(LinkedList 也是List接口的实现类)。

2、Set接口:HashSet 和 TreeSet

  Set接口最常见的实现类是HashSet,HashSet默认是以无序的方式组织元素的,而LinkedHashSet可以有序组织元素;

  Treeset不仅实现了Set接口,还实现了SortedSet和NavigableSet接口。

3、Queue 和 Deque 接口

  接口Queue是Collection接口的子接口,支持对表头的操作,接口Queue的非并发实现类是PriorityQueue;

  接口Deque不仅支持对表头进行操作,而且还支持对表位进行操作,故Deque全称是“dubbo ended queue(双端队列)”,Deque的非并发实现类是ArrayDeque、LinkedList。

4、非阻塞队列:

  ConcurrentHashMap    多个并发线程同时使用同一个HashMap对象时,会出现“程序假死”状态,因为HashMap是线程不安全的,不能被多个线程所操作,HashTable虽然线程安全的,但是在多线程iterator()循环中调用remove()时会报异常,解决办法就是使用ConcurrentHashMap 代替。后面写了一个test,可以参考一下。

  ConcurrentSkipListMap    ConcurrentHashMap不支持排序,而ConcurrentSkipListMap 是 ConcurrentHashMap 的可排序版本

  ConcurrentSkopListSet    支持排序且不允许重复的元素

  ConcurrentLinkedQueue    提供并发环境的队列操作,常用方法:poll()、element()、peek()、add()

  ConcurrentLinkedDeque    ConcurrentLinkedQueue 仅支持表头操作,ConcurrentLinkedDeque 支持队列头和队列尾双向操作

  CopyOnWriteArrayList    ArrayList是非线程安全类,如果想在并发中实现安全,需要使用CopyOnWriteArrayList,CopyOnWriteArrayList 可以在循环中删除元素

  CopyOnWriteArraySet    HashSet的线程安全实现

package com.cd.thread;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; public class ConcurrentClassTest {
public static void main(String args[]) {
// mapTest();
mapTest2();
} public static void mapTest() { // HashMap并发测试,运行此方法,程序会假死
Map map = new HashMap();
new MyThread("小A", map).start();
new MyThread("小B", map).start();
} public static void mapTest2() { // ConcurrentHashMap并发测试,运行此方法,程序正常运行
Map map = new ConcurrentHashMap();
new MyThread("小A", map).start();
new MyThread("小B", map).start();
} private static class MyThread extends Thread {
private String name; private Map map; private MyThread(String name, Map map) {
this.name = name;
this.map = map;
} public void run() {
for (int i = 0; i < 50000; i++) {
map.put(name + "-" + i, name + "-" + i);
System.out.println(name + "-" + i);
}
}
} }

5、阻塞队列:

  ArrayBlockingQueue    有界阻塞队列

  PriorityBlockingQueue    并发情况下的有限队列

  LinkedBlockingQueue    与 ArrayBlockingQueue 功能一致,但是 LinkedBlockingQueue 是无界的

  LinkedBlockingDueue    LinkedBlockingQueue 的双向队列版本

  SynchronousQueue    异步队列,每个插入操作必须等待另一个线程的对应移除操作,反之亦然。

  DelayQueue    延时执行任务的队列

  LinkedTransferQueue    提供与 SynchronousQueue 类似的功能,但具有嗅探功能,可以尝试性地添加一些数据

最新文章

  1. Function Set in OPEN CASCADE
  2. 五、基于hadoop的nginx访问日志分析--userAgent和spider
  3. Game中的状态机
  4. mysql数据库日期,ip等处理
  5. NetLink Communication Mechanism And Netlink Sourcecode Analysis
  6. PLSQL查询表是否被锁定(转)
  7. Linux 进程通信(共享内存区)
  8. jQuer基础
  9. 关于NSURL的一些属性的记录
  10. javaweb 学习的好地方
  11. StudentSchema student实例数据库环境搭建
  12. CF 327E(Axis Walking-状态压缩Dp-lowbit的使用)
  13. 在没有DOM操作的日子里,我是怎么熬过来的(上)
  14. Is It A Tree?(并查集)(dfs也可以解决)
  15. [高并发]抢红包设计(使用redis)
  16. React Native之AppRegistry模块
  17. 高德地图JS API获取经纬度,根据经纬度获取城市
  18. 初学Java Web(5)——cookie-session学习
  19. 日积月累---JVM01
  20. servlet实现mysql数据库分页

热门文章

  1. 前端图片缓存之通过img标签加载GIF只能播放一次问题(转载)
  2. sench touch 时间插件 扩展
  3. hdu4003
  4. 深入理解 Vue Computed 计算属性
  5. swagger2访问url
  6. 011-Python-进程、线程于协程
  7. UIDebuggingInformationOverlay 调试
  8. PHP中self和this的用法区别
  9. Lambda表达式树构建(上)
  10. 2. ELK 之kibana 简介、获取、安装