多线程集合Collections(Vector、Hashtable、ArrayList、LinkedList、HashMap )

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a303549861/article/details/53028635

在Collections类 中有多个静态方法,它们可以获取通过同步方法封装非同步集合而得到的集合:

     public static Collection synchronizedCollention(Collection c)

     public static List synchronizedList(list l)

     public static Map synchronizedMap(Map m)

     public static Set synchronizedSet(Set s)

     public static SortedMap synchronizedSortedMap(SortedMap sm)

     public static SortedSet synchronizedSortedSet(SortedSet ss)

这些方法基本上返回具有同步集合方法版本的新类。比如,为了创建多线程安全且由ArrayList支持的List,可以使用如下代码:

List list = Collection.synchronizedList(new ArrayList());

下面是一段多线程操作集合的事例,火车票集合既有增也有减:

    public static void main(String[] args) {
        //初始化火车票池并添加火车票:避免线程同步可采用Vector替代ArrayList  HashTable替代HashMap

        final Vector<String> tickets = new Vector<String>();

        //Map<String, String> map = Collections.synchronizedMap(new HashMap<String, String>());

        for(int i = 1; i<= 1000; i++){
            tickets.add("火车票"+i);
        }

//      for (Iterator iterator = tickets.iterator(); iterator.hasNext();) {
//          String string = (String) iterator.next();
//          tickets.remove(20);
//      }

        for(int i = 1; i <=10; i ++){
            new Thread("线程"+i){
                public void run(){
                    while(true){
                        if(tickets.isEmpty()) break;
                        System.out.println(Thread.currentThread().getName() + "---" + tickets.remove(0));
                    }
                }
            }.start();
        }
    }

1、如果线程要求安全,使用Vector,Hashtable

2、如果不要求线程安全,应使用ArrayList,LinkedList,HashMap

3、如果要求键值对,则使用HashMap、Hashtable

4、如果数据很大,又要线程安全考虑Vector

访问效率最高的是ArrayList,HashTable次之
如果你会进行大量的插入/删除操作,而不是对容器中的元素进行简单的访问,那就该用LinkedList了

在单线程下:vector和hashtable已经被ArrayList和hashMap代替,所以效率是最低的

猜你喜欢

转载自blog.csdn.net/a303549861/article/details/53028635
今日推荐