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 LinkedList HashMap HashSet TreeMap TreeSet StringBulider 线程安全集合: Vector HashTable Properties 集合线程安全与解决方案 ArrayList...
ArraysList是线程不安全的数据类型。...elementData与size都是全局变量,但没有进行sychronization同步处理,elementData是共享的线程不安全的mutable可变数据。 public class ArrayList extends Abs
java的 ArrayList的使用与分析
Java标准库中的一些类如ArrayList、HashMap和SimpleDateFormat,都是非线程安全的,在多线程环境下直接使用它们可能导致一些非预期的结果,甚至是一些灾难性的结果。一般来说,Java标准库中的类在其API文档中会说明...
另一方面,由于ArrayList是线程不安全的,因此在使用ArrayList时需要注意多线程同步问题,可以通过使用线程安全的Collections.synchronizedList()方法来创建线程安全的ArrayList。 总之,ArrayList是Java中一种很...
ArrayList演示,有汗多集合的例子,大家可以参考和下载资源!
主要介绍了ArrayList源码和多线程安全问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面小编和大家一起来学习一下吧
Arraylist 和 List<T> 在使用的效率是不一样的,选择不同的集合 能使项目的性能有很大的提高!
详细介绍Java中ArrayList的使用方法以及与vector的对比
在C#早期版本中已经实现了线程安全的ArrayList,可以通过下面的方式构造线程安全的数组列表:var array = ArrayList.Synchronized(new ArrayList()); 我们从Synchronized方法入手,分析它的源代码看是
ArrayList深度剖析与简单实用、 ArrayList重要的方法和属性(1)构造器 ArrayList提供了三个构造器 Count属性和Capacity属性 4、ArrayList与数组转换 Array的复杂版本 ArrayList常用方法 ArrayList同步机制 ...
老猿说说-ArrayList MD文件 1. 所有的操作都是线程安全的,我们在使用时,无需再加锁; 2. 多个线程同时进行put、remove等操作时并不会阻塞,可以同时进行,和HashTable不同,HashTable在操作时,会锁住整个Map; 3. ...
集合ArrayList测试集合ArrayList测试集合ArrayList测试集合ArrayList测试集合ArrayList测试集合ArrayList测试
使用Collections.synchronizedList(new ArrayList()):内部直接将接受的List对象传递给静态内部类SynchronizedList对象,然后Collections.synchronizedList(new ArrayList())返回的List对象的调用方法都是直接调用...
ArrayList Vector LinkedList 区别与用法.
对数组和ArrayList的学习总结,详细介绍了数组与ArrylyList的使用
arrayList排序arrayList排序arrayList排序
一个C++(Ubuntu16.04+QT5.9.1)通过JNI,调用JAVA类及方法的示例。通过JNI传递和返回多种类型的参数,boolean ,int,String,ArrayList,ArrayList嵌套ArrayList<ArrayList<String>>等。
要回答这个问题不能一概而论,有时候使用Vector比较好;有时是ArrayList,有时候这两个都不是最好的选择。你别指望能够获得一个简单肯定答案,因为这要看你用它们干什么。下面有4个要考虑的因素: