java同步集合、线程安全

在Java中,有普通集合、同步的集合(即线程安全的集合)、并发集合。

并发集合常见的有ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentLinkedDeque等。并发集合位于java.util.concurrent包下,是在JDK1.5之后才有的。


同步集合

通过synchronized来实现同步的集合。如果有多个线程调用同步集合的方法,它们将会串行执行。 

普通集合

性能最高,但是不保证多线程的安全性和并发的可靠性;
并发集合

通过复杂的策略不仅保证了多线程的安全,又提高了并发时的效率


线程安全:

就是当多线程访问时,采用了加锁的机制;即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读取完之后,其他线程才可以使用。防止出现数据不一致或者数据被污染的情况。
线程不安全:

就是不提供数据访问时的数据保护,多个线程能够同时操作某个数据,从而出现数据不一致或者数据污染的情况。
对于线程不安全的问题,

一般会使用synchronized关键字加锁同步控制。
 


java同步集合、线程安全_第1张图片

图来源于菜鸟教程https://www.runoob.com/java/java-collections.html

java同步集合、线程安全_第2张图片

图来源于https://blog.51cto.com/caochun/1699844


类名 同步集合 并发集合 线程安全 简介
         
Vector   Stack是继承于Vector,基于动态数组实现的一个线程安全的栈,支持线程同步
ArrayList      
HashMap      HashMap是非synchronized的,是非线程安全的
Hashtable    Hashtable是synchronized的,是线程安全的;
Collections.synchronizedMap()、Collections.synchronizedList()       

ConcurrentHashMap

CopyOnWriteArrayList

CopyOnWriteHashSet

     
         

ArrayList :

LinkedList

    ×  

TreeMap:

TreeSet:

    × 完全基于Map来实现的,是非线程安全的
HashSet:       基于HashMap实现,是非线程安全的
StringBulider:       线程非安全的
StringBuffer     线程安全的
         
         
         
         
         
         
         

 

 

你可能感兴趣的:(java开发)