Java并发编程之同步容器和并发容器

不念不忘少年蓝@ 2022-03-18 14:54 576阅读 0赞

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

  1. 一:同步容器
  2. 同步容器主要包括2类:
  3. 1VectorStackHashTable
  4. Vector实现了List接口,Vector底层是一个数组,其对于数组的各种操作和ArrayList几乎一样,唯一不同的在于大部分线程不安全的方法都加了syncrhoized关键字去限定。
  5. Stack底层也是一个数组,它继承于Vector类,很多方法也用syncrhoized关键字加了锁。
  6. HashTable实现了Map接口,它的实现原理几乎和HashMap一样。但是HashTable对很多方法都加了syncrhoized关键字进行限定。

2)Collections 工具类中提供的同步集合类

  1. Collection**s**类是一个工具类,相当于Arrays类对于Array的支持,Collection**s**类中提供了大量对集合或者容器进行排序、查找的方法。它还提供了几个静态方法来创建同步容器类:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjQ2NTQ2_size_16_color_FFFFFF_t_70

  1. 二:并发容器
  2. 同步容器是通过syncrhoized关键字对线程不安全的操作进行加锁来保证线程安全的,其原理是使得多线程轮流获取同步锁进行对集合的操作,所以性能有所下降。
  3. 为此,java.util.concurrent提供了多种并发容器,以:在原有集合的拷贝上进行操作,用修改后的集合替换原集合 的方式来达到并发且安全地使用集合类的目的。
  4. 根据接口的类型,主要有以下四种接口,其他具体的容器均是对这些接口的实现类:
  • Queue类型:阻塞队列BlockingQueue、非阻塞队列ConcurrentLinkedQueue
  • Map类型:ConcurrentMap
  • Set类型:ConcurrentSkipListSet、CopyOnWriteArraySet
  • List类型:CopyOnWriteArrayList

    在后面的博文我们将逐个分类一一了解具体的并发容器实现类。

发表评论

表情:
评论列表 (有 0 条评论,576人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java并发编程---同步容器

    一.概念 同步类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作.复合类操作如:迭代(反复访问元素,遍历完容器中所有的元素),跳转(根据指定的顺序找到当前元素的下