`

ArrayList的线程安全与不安全对比演示

阅读更多
Java语言: ArrayList的线程安全与不安全对比演示

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class ThreadSafeDemo {
    public static int demo(final List list, final int testCount) throws InterruptedException {
        ThreadGroup group = new ThreadGroup(list.getClass().getName() + "@" + list.hashCode()); 
        final Random rand = new Random(); 
        
        Runnable listAppender = new Runnable() {
            public void run() {
                try {
                    Thread.sleep(rand.nextInt(2));
                } catch (InterruptedException e) {
                    return; 
                } 
                list.add("0"); 
            }
        }; 
        
        for (int i = 0; i < testCount; i++) {
            new Thread(group, listAppender, "InsertList-" + i).start(); 
        }
        
        while (group.activeCount() > 0) {
            Thread.sleep(10); 
        }
        
        return list.size(); 
    }
    public static void main(String[] args) throws InterruptedException {
        List unsafeList = new ArrayList(); 
        List safeList = Collections.synchronizedList(new ArrayList()); 
        final int N = 10000; 
        for (int i = 0; i < 10; i++) {
            unsafeList.clear(); 
            safeList.clear(); 
            int unsafeSize = demo(unsafeList, N); 
            int safeSize = demo(safeList, N); 
            System.out.println("unsafe/safe: " + unsafeSize + "/" + safeSize); 
        }
    }
}
分享到:
评论

相关推荐

    ArrayList的线程安全测试

    ArrayList的线程安全测试,测试ArrayList对象在多线程情况下的访问安全

    Java集合多线程安全.docx

    线程安全与不安全集合 线程不安全集合: ArrayList LinkedList HashMap HashSet TreeMap TreeSet StringBulider 线程安全集合: Vector HashTable Properties 集合线程安全与解决方案 ArrayList...

    (Java源码阅读) ArrayList为什么线程不安全?

    ArraysList是线程不安全的数据类型。...elementData与size都是全局变量,但没有进行sychronization同步处理,elementData是共享的线程不安全的mutable可变数据。 public class ArrayList extends Abs

    java ArrayList的使用与分析

    java的 ArrayList的使用与分析

    Java多线程编程的线程安全性.docx

    Java标准库中的一些类如ArrayList、HashMap和SimpleDateFormat,都是非线程安全的,在多线程环境下直接使用它们可能导致一些非预期的结果,甚至是一些灾难性的结果。一般来说,Java标准库中的类在其API文档中会说明...

    java关键字ArrayList详解

    另一方面,由于ArrayList是线程不安全的,因此在使用ArrayList时需要注意多线程同步问题,可以通过使用线程安全的Collections.synchronizedList()方法来创建线程安全的ArrayList。 总之,ArrayList是Java中一种很...

    ArrayList演示

    ArrayList演示,有汗多集合的例子,大家可以参考和下载资源!

    ArrayList源码和多线程安全问题分析

    主要介绍了ArrayList源码和多线程安全问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面小编和大家一起来学习一下吧

    arraylist 和 list<T> 效率对比

    Arraylist 和 List&lt;T&gt; 在使用的效率是不一样的,选择不同的集合 能使项目的性能有很大的提高!

    Java中ArrayList的使用方法以及与vector的对比

    详细介绍Java中ArrayList的使用方法以及与vector的对比

    深入线程安全容器的实现方法

    在C#早期版本中已经实现了线程安全的ArrayList,可以通过下面的方式构造线程安全的数组列表:var array = ArrayList.Synchronized(new ArrayList()); 我们从Synchronized方法入手,分析它的源代码看是

    ArrayList深度剖析与简单实用

    ArrayList深度剖析与简单实用、 ArrayList重要的方法和属性(1)构造器 ArrayList提供了三个构造器 Count属性和Capacity属性 4、ArrayList与数组转换 Array的复杂版本 ArrayList常用方法 ArrayList同步机制 ...

    ArrayList.md

    老猿说说-ArrayList MD文件 1. 所有的操作都是线程安全的,我们在使用时,无需再加锁; 2. 多个线程同时进行put、remove等操作时并不会阻塞,可以同时进行,和HashTable不同,HashTable在操作时,会锁住整个Map; 3. ...

    集合ArrayList测试集合ArrayList测试集合ArrayList测试

    集合ArrayList测试集合ArrayList测试集合ArrayList测试集合ArrayList测试集合ArrayList测试集合ArrayList测试

    Java的线程安全与不安全集合.docx

    使用Collections.synchronizedList(new ArrayList()):内部直接将接受的List对象传递给静态内部类SynchronizedList对象,然后Collections.synchronizedList(new ArrayList())返回的List对象的调用方法都是直接调用...

    ArrayList Vector LinkedList 区别与用法.

    ArrayList Vector LinkedList 区别与用法.

    C#数组与Arraylist

    对数组和ArrayList的学习总结,详细介绍了数组与ArrylyList的使用

    arrayList排序

    arrayList排序arrayList排序arrayList排序

    JNI与C++数据类型传递示例(包括ArrayList对象、ArrayList嵌套返回)

    一个C++(Ubuntu16.04+QT5.9.1)通过JNI,调用JAVA类及方法的示例。通过JNI传递和返回多种类型的参数,boolean ,int,String,ArrayList,ArrayList嵌套ArrayList&lt;ArrayList&lt;String&gt;&gt;等。

    Vector 与ArrayList区别

    要回答这个问题不能一概而论,有时候使用Vector比较好;有时是ArrayList,有时候这两个都不是最好的选择。你别指望能够获得一个简单肯定答案,因为这要看你用它们干什么。下面有4个要考虑的因素:

Global site tag (gtag.js) - Google Analytics