线程安全 && 线程不安全

线程安全对象:ArrayList,LinkedList,HashMap,StringBuilder

ArrayList在内部使用了数组来存储所有元素;

LinkedList通过“链表”也实现了List接口,在LinkedList中,它的内部每个元素都指向下一个元素

 

HashMap一个散列表,它存储的内容是键值对(key-value)映射。
该类实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。

StringBuilder是一个可变对象,可以预分配缓冲区,往StringBuilder中新增字符时,不会创建新的临时对象

注意:对于普通的字符串+操作,并不需要我们将其改写为StringBuilder,因为Java编译器在编译时就自动把多个连续的+操作编码为StringConcatFactory的操作。在运行期,StringConcatFactory会自动把字符串连接操作优化为数组复制或者StringBuilder操作。

线程不安全对象:Vector,HashTable, StringBuffer

Vector(向量)类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。

和数组一样,Vector对象的元素也能通过索引访问。

使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。

HashTable类提供了一种在用户定义键结构的基础上来组织数据的手段。

例如,在地址列表的哈希表中,你可以根据邮政编码作为键来存储和排序数据,而不是通过人名。

哈希表键的具体含义完全取决于哈希表的使用情景和它包含的数据。

StringBuffer是Java早期的一个StringBuilder的线程安全版本,它通过同步来保证多个线程操作StringBuffer也是安全的,但是同步会带来执行速度的下降。

StringBuilder和StringBuffer接口完全相同。

 

interface                                           non-thread-safe                                      thread-safe

List                                                    ArrayList                                                CopyOnWriteArrayList

Map                                                   HashMap                                               ConcurrentHashMap

Set                                                    HashSet/TreeSet                                    CopyOnWriteArraySet

Queue                                               ArrayDeque/LinkedList                           ArrayBlockingQueue/LinkedBlockingQueue

Deque                                               ArrayDeque/LinkedList                           LinkedBlockingQueue

java.util.Collections工具类还提供了一个旧的线程安全集合转换器:

把List类包装成线程安全:Collections.synchronizedList(list);

把Set类包装成线程安全:Collections.synchronizedSet(set);

把HashMap类包装成线程安全:Collections.synchronizedMap(hashMap);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值