之前所学习到的线程安全的类:
StringBuffer:线程安全的可变字符序列。一个类似于 String
的字符串缓冲区,但不能修改。
Vector:Vector
类可以实现可增长的对象数组。
Hashtable:此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null
对象都可以用作键或值。
// 线程安全的类
StringBuffer sb = new StringBuffer();
Vector<String> v = new Vector<String>();
Hashtable<String, String> h = new Hashtable<String, String>();
之前提过,Vector是线程安全的时候才去考虑的,但是就算要安全,也不使用它。
那么,我们使用什么呢?用下面这些:
API 搜索Collections,查看方法
A:public static <T> Collection<T> synchronizedCollection(Collection<T> c):返回指定 collection 支持的同步(线程安全的)collection。
B:public static <T> List<T> synchronizedList(List<T> list):返回指定列表支持的同步(线程安全的)列表。
C:public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m):返回由指定映射支持的同步(线程安全的)映射。
D:public static <T> Set<T> synchronizedSet(Set<T> s):返回指定 set 支持的同步(线程安全的)set。
E:public static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m):返回指定有序映射支持的同步(线程安全的)有序映射。
F:public static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s):返回指定有序 set 支持的同步(线程安全的)有序 set。
选B来作为例子:
之前的线程不安全:
List<String> list1 = new ArrayList<String>();// 线程不安全
现在使用B,线程安全的:
List<String> list2 = Collections.synchronizedList(new ArrayList<String>()); // 线程安全