线程安全类
线程安全类
- 一 线程安全类:
-
- 1. StringBuffer
- 2. vector
- 3. Hashtable
- 二 Collections集合工具类,含有线程安全集合类方法的使用:(以下是部分举例)
- 三 以代码内容形式讲解:
-
- 1. 创建一个ThreadDemo测试类(仔细理解,很重要!!!):
一 线程安全类:
底层源码都加了synchronized关键字修饰
1. StringBuffer
- 线程安全可变字符串序列
- 从版本JDK 5开始,这个类别已经被一个等级类补充了,这个类被设计为使用一个线程StringBuilder 。 StringBuilder应该使用StringBuilder类,因为它支持所有相同的操作,但它更快,因为它不执行同步。
- 图文:
2. vector
- 从Java 2平台v1.2,这个类被改造为实现List接口,使其成为成员Java Collections Framework 。 与新集合实现不同, Vector是同步的。 如果不需要线程安全的实现,建议使用ArrayList代替Vector 。
- 图文:
3. Hashtable
- 该类实现了一个哈希表,它将键映射到值。 任何非null对象都可以用作键值或值。
- 从Java 2平台v1.2,这个类被改造为实现Map接口,使其成为成员Java Collections Framework 。 与新的集合实现不同, Hashtable是同步的。 如果不需要线程安全的实现,建议使用HashMap代替Hashtable 。 如果需要线程安全的并发实现,那么建议使用ConcurrentHashMap代替Hashtable 。
- 图文:
二 Collections集合工具类,含有线程安全集合类方法的使用:(以下是部分举例)
方法名 | 说明 |
---|---|
static List synchronizedList(List list); | 返回由指定列表支持的同步(线程安全)列表。 |
static Map synchronizedMap(Map m); | 返回由指定地图支持的同步(线程安全)映射。 |
static Set synchronizedSet(Set s); | 返回由指定集合支持的同步(线程安全)集。 |
三 以代码内容形式讲解:
1. 创建一个ThreadDemo测试类(仔细理解,很重要!!!):
package Demo;import java.util.*;public class ThreadDemo { public static void main(String[] args) { StringBuffer sb = new StringBuffer();//安全类 StringBuilder sb2 = new StringBuilder(); Vector<String> v = new Vector<>();//安全类 ArrayList<String> array = new ArrayList<>();//static List synchronizedList(List list) 返回由指定列表支持的同步(线程安全)列表。 //将线程不安全的ArrayList()集合类变成线程安全的集合类 List<String> list = Collections.synchronizedList(new ArrayList<String>()); Hashtable<String, String> ht = new Hashtable<>();//安全类 HashMap<String, String> hm = new HashMap<>();// static Map synchronizedMap(Map m) 返回由指定地图支持的同步(线程安全)映射。 //将线程不安全的HashMap()集合类变成线程安全的集合类 Map<String, String> sm = Collections.synchronizedMap(new HashMap<String, String>()); }}