把非线程安全的集合转换为线程安全

ArrayList是非线程安全的,换句话说,多个线程可以同时进入一个ArrayList对象的add方法

借助Collections.synchronizedList,可以把ArrayList转换为线程安全的List。

与此类似的,还有HashSet,LinkedList,HashMap等等非线程安全的类,都通过工具类Collections转换为线程安全的


1

2

3

4

5

6

7

8

9

10

11

12

13

14

package multiplethread;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

public class TestThread {

   

    public static void main(String[] args) {

        List<Integer> list1 = new ArrayList<>();

        List<Integer> list2 = Collections.synchronizedList(list1);

    }

       

}

原文地址:https://www.cnblogs.com/chinaifae/p/10193716.html

时间: 2024-10-26 11:53:37

把非线程安全的集合转换为线程安全的相关文章

编写高质量代码改善C#程序的157个建议——建议22:确保集合的线程安全

建议22:确保集合的线程安全 集合线程安全是指多个线程上添加或删除元素时,线程键必须保持同步. 下面代码模拟了一个线程在迭代过程中,另一个线程对元素进行了删除. class Program { static List<Person> list = new List<Person>() { new Person() { Name = "Rose", Age = 19 }, new Person() { Name = "Steve", Age =

08 Java 集合的线程安全问题

1 Java中的集合 Java中的集合分为同步的集合(线程安全)和线程不安全的集合 例如 : ArrayList和Vector的区别: 一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 二.数据增长:当需要增长时,Vector默认增长为原来一倍,而ArrayList默认增长为原来的1.5倍 HashMap和Hashtable的区别   一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进

非线程安全的HashMap 和 线程安全的ConcurrentHashMap(转载)

在平时开发中,我们经常采用HashMap来作为本地缓存的一种实现方式,将一些如系统变量等数据量比较少的参数保存在HashMap中,并将其作 为单例类的一个属性.在系统运行中,使用到这些缓存数据,都可以直接从该单例中获取该属性集合.但是,最近发现,HashMap并不是线程安全的,如果你 的单例类没有做代码同步或对象锁的控制,就可能出现异常. 首先看下在多线程的访问下,非现场安全的HashMap的表现如何,在网上看了一些资料,自己也做了一下测试: public class MainClass {  

Java核心技术 卷1 多线程----线程安全的集合(4)

如果多线程要并发的修改一个数据结构,例如散列表,那么很容易会破坏这个数据结构.一个线程可能要开始向表中插入一个新元素.假定在调整散列表各个桶之间的链接关系的过程中,被剥夺了控制权.如果另一个线程也开始遍历同一个链表,可能使用无效的链接并造成混乱,会抛出异常或者陷入死循环. 可以通过提供锁来保护共享数据结构,但是选择线程安全的实现作为替代可能更容易些.上一篇讨论的阻塞队列就是线程安全的集合.接下来讨论java类库提供的另外一些线程安全的集合. 高效的映射表.集合和队列 java.util.conc

Java中的集合和线程安全

通过Java指南我们知道Java集合框架(Collection Framework)如何为并发服务,我们应该如何在单线程和多线程中使用集合(Collection). 话题有点高端,我们不是很好理解.所以,我会尽可能的描述的简单点.通过这篇指南,你将会对Java集合由更深入的了解,而且我敢保证,这会对你的日常编码非常有用. 1. 为什么大多数的集合类不是线程安全的? 你注意到了吗?为什么多数基本集合实现类都不是线程安全的?比如:ArrayList,?LinkedList,?HashMap,?Has

.NET 同步与异步 之 线程安全的集合 (十一)

本随笔续接:.NET 同步与异步 之 警惕闭包(十) 无论之前说的锁.原子操作 还是 警惕闭包,都是为安全保驾护航,本篇随笔继续安全方面的主题:线程安全的集合. 先看一下命名空间:System.Collections.Concurrent,常用的类型有(均为泛型):BlockingCollection<T>.ConcurrentBag<T>.ConcurrentDictionary<TKey, TValue>.ConcurrentQueue<T>.Concu

线程高级应用-心得8-java5线程并发库中同步集合Collections工具类的应用及案例分析

1.  HashSet与HashMap的联系与区别? 区别:前者是单列后者是双列,就是hashmap有键有值,hashset只有键: 联系:HashSet的底层就是HashMap,可以参考HashSet的类源码,默认构造方法为: public HashSet(){ map = new HashMap<key,Object> } 就是HashSet只用HashMap的键,而不用他的值,前者的值可以程序员随便指定,反正不用 2.  线程并发库中的集合优路劣之分 HashMap和HashSet如果在

Concurrent包总结——线程安全的集合操作

java中提供了丰富的集合类操作,大概可以分为无序结合Set,有序集合List和无序键值对集合Map.Java5之后又新增了队列操作集合Queue.Java1.5之后新增了线程安全的集合操作类,阻止在java.util.concurrent包中.本文仅仅探讨该包下面的线程安全的结合操作类. 先看下concurrent包下面线程安全类的类图结构: 1.CopyOnWriteArraySet类 CopyOnWriteArrayList类的底层是通过CopyOnWriteArrayList来实现的.因

java中线程安全的集合对象

Vector与ArrayList Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销. HashTable与HashMap Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的.在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了. StringBuilder与StringBuffer StringBuilder和StringBuffer的方法是一模一样,就前者是多