Java同步容器和并发容器

本文深入探讨Java中集合类的线程安全问题,包括Vector、Stack、HashTable等同步容器的特点,以及Collections工具类提供的同步集合类。同时,介绍了并发容器如ConcurrentMap、ConcurrentLinkedQueue等的设计理念和实现方式,旨在帮助开发者理解并选择合适的线程安全集合。
摘要由CSDN通过智能技术生成

我们知道,普通的集合类ArrayList、LinkedList、HashMap等等是线程不安全的,即:在多线程共同操作这些类对象时,会发生竞态条件或者异常。如果我们需要在多线程下使用这些集合类,就需要显示地进行同步操作(用syncrhoized关键字等对集合类的操作代码加同步锁)。如果不想这么麻烦,我们可以送Java提供的同步容器,同步容器默认是线程安全的,对它的操作都是已经默认加了同步锁的。

一:同步容器

同步容器主要包括2类:
1)Vector、Stack、HashTable
Vector实现了List接口,Vector底层是一个数组,其对于数组的各种操作和ArrayList几乎一样,唯一不同的在于大部分线程不安全的方法都加了syncrhoized关键字去限定。

Stack底层也是一个数组,它继承于Vector类,很多方法也用syncrhoized关键字加了锁。

HashTable实现了Map接口,它的实现原理几乎和HashMap一样。但是HashTable对很多方法都加了syncrhoized关键字进行限定。

2)Collections 工具类中提供的同步集合类
Collections类是一个工具类,相当于Arrays类对于Array的支持,Collections类中提供了大量对集合或者容器进行排序、查找的方法。它还提供了几个静态方法来创建同步容器类:
在这里插入图片描述

二:并发容器

同步容器是通过syncrhoized关键字对线程不安全的操作进行加锁来保证线程安全的,其原理是使得多线程轮流获取同步锁进行对集合的操作,所以性能有所下降。

为此,java.util.concurrent提供了多种并发容器,以:在原有集合的拷贝上进行操作,用修改后的集合替换原集合 的方式来达到并发且安全地使用集合类的目的。

根据接口的类型,主要有以下四种接口,其他具体的容器均是对这些接口的实现类:

Queue类型:阻塞队列BlockingQueue、非阻塞队列ConcurrentLinkedQueue
Map类型:ConcurrentMap
Set类型:ConcurrentSkipListSet、CopyOnWriteArraySet
List类型:CopyOnWriteArrayList

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值