并发编程-线程安全策略之并发容器(j.u.c)中的集合类(代码片段)

爱上口袋的天空 爱上口袋的天空     2022-12-15     236

关键词:

J.U.C总览

脑图

 

同步容器:

 并发容器

 

概述

同步容器是通过synchronized来实现同步的,所以性能较差。而且同步容器也并不是绝对线程安全的,在一些特殊情况下也会出现线程不安全的行为。那么有没有更好的方式代替同步容器呢?----> 那就是并发容器,有了并发容器后同步容器的使用也越来越少的,大部分都会优先使用并发容器(J.U.C).

并发容器特性

  • CopyOnWriteArrayListCopyOnWriteArraySet因为需要copy数组,需要消耗内存,可能引发yonggc或者 fullgc,并且不能做到实时性,适合读多写少的情景

  • ConcurrentSkipListSet 支持自然排序,并且可以在构造的时候自己定义比较器,可以保证每一次的操作是原子性的,比如add()、remove等,但是对于批量操作,如addAll()等并不能保证原子性(需要自己手动做同步操作,如加锁等)

  • ConcurrentHashMap针对读操作做了大量的优化,这个类具有特别高的并发性,高并发场景下有特别好的表现

  • ConcurrentSkipListMapConcurrentHashMap相比的key是有序的,它支持更高的并发,它的存取时间和线程数是没有关系的,在一定的数据量下,并发的线程越多ConcurrentSkipListMap越能体现出它的优势来

示例

ArrayList对应的线程安全的并发容器类CopyOnWriteArrayList (线程安全)

运行结果:线程安全

 


HashSet对应的线程安全的并发容器类CopyOnWriteArraySet (线程安全)

 

运行结果:线程安全


TreeSet对应的线程安全的并发容器类 ConcurrentSkipListSet (线程安全) 

 

运行结果:线程安全


TreeMap对应的线程安全的并发容器类ConcurrentSkipListMap (线程安全) 

 

运行结果:线程安全


HashMap对应的线程安全的并发容器类ConcurrentHashMap (线程安全) 

运行结果:线程安全

并发容器线程安全应对之道-concurrenthashmap

2并发容器线程安全应对之道引言在前面,我们学习了hashmap大家都知道HashMap不是线程安全(put、删除、修改、递增、扩容都无锁)的所以在处理并发的时候会出现问题接下来我们看下J.U.C包里面提供的一个线程安全并且高效Map(C... 查看详情

并发编程-线程安全策略之不可变对象(代码片段)

...象,在没有额外同步的情况下,可以被多个线程并发访问,但是任何线程都不能修改它线程安全对象一个线程安全的对象或者容器,在内部通过同步机制来保证线程安全,所以其他线程无需额外的同步就可以... 查看详情

并发编程-线程安全策略之线程封闭(代码片段)

...,不要使用堆栈封闭 方法中定义局部变量。不存在并发问题堆栈封闭其实就是方法中定义局部变量。不存在并发问题。多个线程访问一个方法的时候,方法中的 查看详情

并发编程-并发容器(j.u.c)核心abstractqueuedsynchronizer抽象队列同步器aqs介绍(代码片段)

...1a;J.U.C核心AQS简介  AQS(AbstractQueuedSynchronizer)是并发容器中的同步器,AQS是J.U.C的核心,它是抽象的队列式的同步器,AQS定义了一套多线程访问共享资 查看详情

并发编程之j.u.c的第二篇

并发编程之J.U.C的第二篇3.2StampedLock4.SemaphoreSemaphore原理5.CountdownLatch6.CyclicBarrier7.线程安全集合类概述8.ConcurrentHashMap3.JDK7ConcurrentHashMap3.性能比较10.ConcurrentLinkedQueue11.CopyOnWriteArrayList 3.2StampedLock该类自JDK8加入,是为了进一步优... 查看详情

并发编程:线程安全策略(代码片段)

...p;a、不可变对象 b、线程封闭 c、同步容器 d、并发容器  不可变对象   可参考string类,可以采用的方式是将类声明为final,将所有成员都声明为私有的,对变量不提供set方法,将所有可变成员声明为f... 查看详情

多线程编程-之并发编程:同步容器

...写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器、并发容器、阻塞队列、Synchronizer。同时说说List,Set,Map之间的区别. 自动扩展的数组:List 重复的数组:set 自动排序的组数:TreeSet,TreeList,Tree... 查看详情

并发编程-线程安全策略之常见的线程不安全类(代码片段)

脑图概述 前两篇博客,我们说了通过 不可变变量 和 线程封闭 这两种方式来实现线程安全。这里我们来介绍下很常见的线程不安全的类所谓线程不安全的类,是指一个类的实例对象可以同时被多个线程访问,如... 查看详情

高并发编程原理与实战.线程安全.锁原理.同步容器.实战之java架构

1、什么叫容器?-----》数组,对象,集合等等都是容器。 2、什么叫同步容器?-----》Vector,ArrayList,HashMap等等。 3、在多线程环境下,为什么不用同步容器呢?----》1、线程不安全问题。2、线程安全的情况下,但是性能... 查看详情

java并发编程:并发容器(转)

  解决并发情况下的容器线程安全问题的。给多线程环境准备一个线程安全的容器对象。  线程安全的容器对象:Vector,Hashtable。线程安全容器对象,都是使用synchronized方法实现的。  concurrent包中的同步容器,大多数是使用... 查看详情

[java并发编程实战]集合框架之同步容器类&并发容器类

...用的容器类,它们可以简单区分为:非同步集合同步集合并发集合那么,它们 查看详情

java并发编程:并发容器之concurrenthashmap

  JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能。因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了并发性,当多个... 查看详情

java并发编程:并发容器之concurrenthashmap(转载)

Java并发编程:并发容器之ConcurrentHashMap(转载)  下面这部分内容转载自:  http://www.haogongju.net/art/2350374  JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能。因为同步容器将所有对... 查看详情

多线程之同步容器

Java并发编程:同步容器  为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器、并发容器、阻塞队列、Synchronizer(比如CountDownLatch)。今天我们就来讨论下同步容器。  以下是本文... 查看详情

java并发编程:并发容器之copyonwritearraylist(转载)

Java并发编程(十):并发容器之CopyOnWriteArrayList(转载)  原文链接:  http://ifeve.com/java-copy-on-write/    Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某... 查看详情

并发编程之线程

...进程至少有一个线程,线程相当于微进程,多进程能实现并发,多线程也同样可以。线程是最小的执行单元。 2、线程的特点线程依附进程存在同一个进程中的线程数据是互相共享的一个进程可以开启多个线程进程相当于容... 查看详情

java并发编程:同步容器

...写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器、并发容器、阻塞队列、Synchronizer(比如CountDownLatch)。今天我们就来讨论下同步容器。  以下是本文的目录大纲:  一.为什么会出现同步... 查看详情

java并发编程之工具类(代码片段)

...都提供了相应的支撑,与此同时,java还提供了一系列的并发容器和原子类,来使得并发编程更容易。一。并发容器(一)。同步容器同步容器指的是容器本身使用synchronized关键字来同步访问,包括我们都知道的HashTable,也包括Ve... 查看详情