HashSet-ArrayList-HashMap的线程同步控制方法【摘自:新浪博客】

【摘自:新浪博客】

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不允许。

 

 

posted @ 2009-06-24 11:12  blueKnight  Views(898)  Comments(0Edit  收藏  举报