首页 技术 正文
技术 2022年11月15日
0 收藏 885 点赞 3,392 浏览 2132 个字

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 类似的功能,但具有嗅探功能,可以尝试性地添加一些数据

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,130
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,601
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,444
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,218
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,852
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,940