tzkr.net
当前位置:首页 >> 哪几个集合是线程安全的 >>

哪几个集合是线程安全的

一些历史类的一般是线程安全的,例如:vector,hashtable等 在jdk升级后,出现了替代一些集合的类,arraylist,hashmap等,一般都是线程不安全的.

java集合框架提供了多种synchronized集合, 比如Vector, HashTable, Collections的synchronizedXxx方法的返回值等.synchronized集合是线程安全的, 但不是严格线程安全的. 根据JCIP第二章关于线程安全的定义--线程安全的类无需调用方进行额外的同步--synchronized集合是不满足该定义的. 如果我们将线程安全的定义放宽一些--单次调用对象的方法而无需调用方进行额外的同步, 这样synchronized集合就符合定义了.

参考MSDNLIST线程安全--------------------------------------------------------------------------------此类型的公共静态(在 Visual Basic 中为 Shared)成员是线程安全的. 但不能保证任何实例成员是线程安全的.只要不修改该集合, List就可以同时支持多个阅读器. 枚举整个集合本质上不是一个线程安全的过程.在枚举与一个或多个写访问竞争的罕见情况下,确保线程安全的唯一方法是在整个枚举期间锁定集合.若允许多个线程对集合执行读写操作,您必须实现自己的同步.

最通俗的解释就是:当多个线程同时操作一个类的时候,保证不出现数据错误问题,比如现在两个线程,一个先充值100,另一个消费50,假设原有的是100,那么最终的结果应该是150,如果出现线程安全问题的话,有可能第一个线程先读取到余额100,然后充值添加100, 此时另外一个线程读的也是100,但是减去50消费,这个时候,第一个线程准备写入数据,变成了200, 而第二个线程也写入数据,变成50,这个就是线程安全问题了 ArrayList是线程不安全的类,如果你想用线程安全的,可以用Vector

Servlet容器默认采用单实例多线程的方式来处理请求,默认是非线程安全的 一. Servlet容器如何同时来处理多个请求 先说明几个概念: 工作者线程Work Thread:执行代码的一组线程 调度线程Dispatcher Thread:每个线程都具有分配给它的线程

可以利用Collections工具类的synchronizedSet方法修饰一个非同步的Set变成同步Set Set<T> set = new HashSet<T>(); // 非同步,非线程安全的Set Set<T> syncSet = Collections.synchronizedSet(set); // 返回了一个线程安全的Set

通过集合枚举在本质上不是一个线程安全的过程.甚至在对集合进行同步处理时,其他线程仍可以修改该集合,这会导致枚举数引发异常.若要在枚举过程中保证线程安全,可以在整个枚举过程中锁定集合,或者捕捉由于其他线程进行的更改而引发的异常.

arraylist和linkedlist都不是线程安全的

: hashtable, vector是线程安全的

网站首页 | 网站地图
All rights reserved Powered by www.tzkr.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com