335 线程安全的类
(myThread)
StringBuffer -> StringBuilder |
|
Vector -> ArrayList |
|
Hashtable -> HashMap |
|
【代码思路】
在程序中创建对象,ctrl b每个关键词,查看源码,确认其是否线程安全的类
结论:
StringBuffer 的方法都加了synchronized关键字,因此它是线程安全的类
StringBuilder 的方法没有synchronized,因而它不是
Vector 的方法都加了synchronized关键字,因此它是线程安全的类
ArrayList 的方法没有synchronized,因而它不是
Hashtable 的方法都加了synchronized关键字,因此它是线程安全的类
HashMap 的方法没有synchronized,因而它不是
因此,在多线程环境中,使用StringBuffer、Vector、Hashtable就不会有数据安全问题了。
又,Vector、Hashtable在多线程环境中也不用,被替代了。
替代者如下:
(截图来自帮助文档:collections)
调用以上方法,则集合可变为线程安全的集合
本来ArrayList不是线程安全的类,套用Collections.synchronizedList()方法可以把它变成线程安全的。
搜索源码,查看这是如何实现的
---------------------------------------------
package e335;
import java.util.*;
public class ThreadDemo {
StringBuffer sb = new StringBuffer();
StringBuilder sbb = new StringBuilder();
Vector<String> v = new Vector<>();
ArrayList<String> al = new ArrayList<>();
Hashtable<String, String> ht = new Hashtable<>();
HashMap<String, String> hm = new HashMap<>();
List<String> l = Collections.synchronizedList(new ArrayList<String>());
}