回顾前面的线程安全问题(看看源码)
StringBuffer/StringBuilder
Vector
Hashtable
以及Collections中的让集合同步的方法
示例代码如下:
1 package cn.itcast_12;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.Hashtable;
6 import java.util.List;
7 import java.util.Vector;
8
9 public class ThreadDemo {
10 public static void main(String[] args) {
11 // 线程安全的类
12 StringBuffer sb = new StringBuffer(); // 几乎所有的方法都加了synchronized,所以线程安全,但效率低。
13 Vector<String> v = new Vector<String>(); // 几乎所有的方法都加了synchronized,所以线程安全,但效率低。
14 Hashtable<String, String> h = new Hashtable<String, String>(); // 几乎所有的方法都加了synchronized,所以线程安全,但效率低。
15
16 // Vector是线程安全的时候才会去考虑使用的,但是呢,即使要安全,也不用Vector。
17 // 为什么呢?那么到底用谁呢?
18 // Collections工具类的让集合同步的方法,以List举例:
19 // public static <T> List<T> synchronizedList(List<T> list)
20 List<String> list1 = new ArrayList<String>(); // 线程不安全的List
21 List<String> list2 = Collections.synchronizedList(new ArrayList<String>()); // 线程安全的List
22 // 通过Collections类的让集合同步的方法,就把线程不安全的List变成线程安全的List了,所以我们不用Vector!
23 }
24 }