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);
}
}
}
分享到:
相关推荐
该压缩包文件“Java毕业设计-专利对比分析小程序-演示视频(高分期末大作业).rar”包含了一个Java编程的毕业设计项目,主要是一个专利对比分析的小程序,并且附带了一个演示视频“专利对比分析小程序.mp4”。...
而 `ArrayList` 不提供内置的线程安全性,因此在多线程环境中需要外部同步机制。 - **性能**:由于 `Vector` 的同步特性,其性能通常低于 `ArrayList`,特别是在高并发环境下。如果不需要线程安全,推荐使用 `...
5. **ArrayList与LinkedList对比**: - ArrayList更适合于需要频繁访问元素的场合,而LinkedList适合于频繁进行插入和删除操作。 6. **HashSet与TreeSet对比**: - HashSet的性能通常优于TreeSet,因为其内部实现...
7. **数组安全**:Java中的数组是线程不安全的,如果多个线程同时访问和修改数组,可能会导致数据不一致。"Test.java"可能展示了如何在多线程环境中正确使用数组,如使用synchronized关键字或者并发集合。 8. **...
##### 4.1.3 ArrayList与LinkedList的对比 - **ArrayList**:基于数组实现,支持随机访问,适用于频繁的随机访问场景。 - **LinkedList**:基于双向链表实现,不适合随机访问,但插入和删除操作效率高。 ##### ...
文本相似度对比是信息技术领域中的一个重要概念,尤其在信息检索、自然语言处理和教育防作弊系统中广泛应用。在这个Java程序中,它实现了对文本相似度的计算,以便于判断两个或多个文档之间的相似程度。下面将详细...
- 示例代码展示了如何通过继承 Thread 类来创建线程,并演示了一个具体的线程类 `testLabel` 的使用方法。 - 解答:在这个示例中,`testLabel` 类继承自 `Thread` 类,并重写了 `run()` 方法。当通过 `new ...
习题答案会演示如何编写并发程序,并避免常见的线程安全问题。 6. **输入/输出与文件操作**:Java的IO流体系使得处理数据输入输出变得简单,包括文件读写、序列化等。答案会展示各种IO操作的实现。 7. **泛型**:...
2. **单例模式(Singletons)**: 书中讨论了几种实现单例的方式,包括懒汉式、饿汉式、双检锁/双重校验锁(DCL)和静态内部类方式,对比了它们的优缺点和线程安全问题。 3. **构造函数与工厂方法(Constructors and...
- 实战代码:实现Runnable接口和Thread类,演示线程同步(synchronized)和并发工具类(如Semaphore、CountDownLatch)。 6. **IO流**: - 面试题:对比BufferedReader和Scanner的读取效率,解释NIO的特点。 - ...
2. 创建线程:通过实现Runnable接口和继承Thread类两种方式创建线程,并对比优缺点。 3. 线程同步:讲解synchronized关键字、wait/notify机制,以及Lock接口和ReentrantLock等高级同步工具。 六、I/O流 1. 流的概念...
Java提供的丰富的类库,如ArrayList和LinkedList,简化了数据结构的实现,便于教学演示和实践。 另外,采用项目驱动的教学模式也是提高Java教学效果的有效手段。例如,引入R0bocode大作业,让学生参与到实际项目...
- **实例演示**:通过具体示例展示重写与重载的区别及应用。 #### 15. Java中的实例初始化器是什么? - **实例初始化块**:位于类体内部的代码块,用于初始化对象状态。 - **实例初始化顺序**:按照代码出现的顺序...
1. List、Set、Queue接口及其实现类:例如ArrayList、LinkedList、HashSet、TreeSet等,理解它们的特点和使用场景。 2. Map接口及其实现类:如HashMap、TreeMap等,学习键值对存储和操作的方法。 五、输入/输出流 ...
- **对象的生成与使用**:演示如何创建对象以及通过对象调用方法。 - **接口与包**:阐述接口的作用与实现方式,以及包的概念和使用。 - **Java类库的常用类和接口**:列举并简述常用的Java类和接口,如String、...
4. **数组与集合**:数组用于存储固定数量的数据,而集合(如ArrayList、LinkedList、HashSet、Dictionary等)则允许动态地添加、删除元素。实例将展示它们的使用方法。 5. **LINQ(Language Integrated Query)**...
10. **多线程**:理解线程的基本概念,如何创建和管理线程,以及同步和互斥锁的使用,以避免线程安全问题。 11. **反射**:反射允许在运行时动态地获取类型信息并操作对象,是许多高级编程技术的基础。 12. **单元...
7. **集合框架**:Java集合框架包括List、Set、Map等接口及其实现类,如ArrayList、LinkedList、HashSet、HashMap等。了解这些集合的特性和使用方式是进阶Java编程的关键。 8. **函数式编程**:随着Java 8的发布,...
10. **.NET Framework与.NET Core的对比**:随着.NET Core的推出,PPT可能会比较两者之间的异同,包括跨平台能力、依赖注入、性能优化等方面。 11. **代码调试与性能分析**:介绍Visual Studio中的调试工具和性能...