【摘自:新浪博客】
Collections类中提供了多个synchronizedXxx,该方法返回指定集合对象对应的同步对象,从而可以解决多线程并发访问集合时的线程安全问题.
正如Java中常用的集合框架推荐使用的三个实现类:HashSet\ArrayList\HashMap都是线程不安全的.如果有多条线程访问它们,而且有超过一条的线程试图修改它们,则可能出现错务.Collections提供了多个静态方法用于创建同步集合
下面程序创建了四个同步的集合对象
import java.util.*;
public class TestSynchronized
{
public static void main(String[] args)
{
//下面程序创建了四个同步的集合对象
Collection c=Collections.synchronizedCollection(new ArrayList());
List list=Collections.synchronizedList(new ArrayList());
Set s=Collections.synchronizedSet(new HashSet());
Map m=Collections.synchronizedMap(new HashMap());
}
}
在上面的程序中,直接将创建的集合对象传给了Collections的synchronizedXxx方法,这样就直接获取List,Set和Map的线程安全实现版本了
补充一点说明
Vector,HashTable是线程安全的集合类
Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。