import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* 验证ArrayList为线程不安全以及解决方法
* @author microsoft
*
*/
public class ArrayListInThread implements Runnable {
//List<String> list0=new ArrayList<String>(); //thread not safe
List<String> list0=Collections.synchronizedList(new ArrayList<String>()); //thread safe
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep((int)(Math.random()*2));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
list0.add(Thread.currentThread().getName());
}
public static void main(String[] args) {
ThreadGroup group=new ThreadGroup("testGroup");
ArrayListInThread at=new ArrayListInThread();
for(int i=0;i<10000;i++){
Thread th=new Thread(group,at,String.valueOf(i));
th.start();
}
while (group.activeCount() > 0) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println();
System.out.println(at.list0.size());
System.out.println(at.list0.get(0));
}
}
NOTE:
java.util.Vector ----thread safe
java.util.ArrayList----thread not safe
java.util.HashSet----thread not safe
java.util.HashMap----thread not safe
java.util.HashTable-----thread safe
//converse thread-not-safe to thread-safe
List<String> list0=Collections.synchronizedList(new ArrayList<String>());
分享到:
相关推荐
然而,ArrayList本身并不是线程安全的,这意味着在多线程环境中,多个线程同时访问和修改ArrayList时,可能会出现数据不一致或者竞态条件等问题。本测试着重于分析ArrayList在并发环境下的行为,并探讨如何确保其...
但是,在多线程环境下,ArrayList 并不是线程安全的。这篇文章主要介绍了 ArrayList 的源码和多线程安全问题,并通过示例代码进行了详细的分析。 ArrayList 源码分析 ArrayList 的源码主要由以下几个部分组成:数据...
2. 安全性:ArrayList是非线程安全的,如果多个线程同时操作,可能会导致数据不一致。在多线程环境下,可以使用`ArrayList.Synchronized()`创建一个线程安全的版本,或者使用线程安全的集合类,如`ConcurrentBag<T>`...
在C语言中,ArrayList是一种常见的数据结构,它模拟了Java或.NET等高级语言中的动态数组。ArrayList提供了在数组中添加...在实际应用中,我们还需要考虑错误处理、线程安全以及优化等问题,以确保代码的健壮性和效率。
此外,为防止因网络问题导致的不完整下载,可能需要定期检查并验证已下载的部分,或者实现一种回滚机制。 总的来说,这个资料包可能包含有关如何在Java中实现多线程下载,利用HTTP断点续传技术优化大文件传输,以及...
4. **线程安全类**:如ArrayList不是线程安全的,而Vector和CopyOnWriteArrayList是线程安全的,比较它们在多线程环境下的优劣。 5. **死锁示例**:模拟死锁情况,分析并解决死锁问题,理解死锁条件。 6. **线程...
在准备大数据面试的过程中,Java基础是必不可少的一部分,尤其聚焦于集合类、多线程和JVM这三大核心领域。下面将分别对这三个方面进行深入探讨。 **一、Java集合类** Java集合框架是处理对象组的重要工具,它包括...
实现`Runnable`接口可以创建一个不包含自己的线程的类。`InitSystem`类实现了`Runnable`接口,它的`run()`方法包含了IP扫描逻辑。 5. **多线程同步**: 使用`volatile`关键字修饰`arrayThread`、`arrayIP`和`...
为了验证一个线程抛出 OOM 异常是否会影响其他线程的运行,我们编写了以下测试代码: ```java new Thread(() -> { List[]> list = new ArrayList[]>(); while (true) { System.out.println(new Date().toString...
1. **线程不安全**:ArrayList不是线程安全的,因此在多线程环境下直接操作可能会导致数据不一致。如果需要线程安全,可以考虑使用CopyOnWriteArrayList。 2. **随机访问**:由于ArrayList基于数组,所以可以通过...
线程间的通信和同步是多线程编程的关键,Java提供了synchronized关键字、wait()、notify()和notifyAll()方法、Lock接口(如ReentrantLock)等工具来确保线程安全。在学习笔记中,你可能会看到如何创建、启动、控制和...
在Java编程领域,经典问题通常涉及算法、数据结构和设计模式等核心概念,这些问题的解决有助于提升编程技能和深入理解Java语言。以下是一些常见的Java经典问题及其详细解析: 1. **数组与集合操作**: - 数组是...
由于ArrayList不是线程安全的,它更适用于单线程环境下,或者多线程环境下有外部同步手段的场景。 LinkedList基于双向链表实现,链表的插入和删除操作不需要移动元素,只需要改变相邻节点的指针即可,因此在列表...
通过系统地学习以上知识点,你可以逐步掌握Java编程,并为后续的多线程编程打下坚实的基础。多线程编程涉及到进程间通信、死锁预防、线程安全等问题,需要深入理解线程的本质和Java提供的多线程支持机制。不断实践和...
- **ArrayList、LinkedList、Vector的区别**:ArrayList基于数组实现,LinkedList基于双向链表,Vector线程安全但效率低。 - **ArrayList用于多线程**:非线程安全,需手动同步。 - **HashMap原理**:基于哈希表实现...
例如,ArrayList不是线程安全的,因此在多线程环境中直接操作可能会导致数据不一致。而ConcurrentHashMap是线程安全的,适用于高并发环境下的键值存储。 在教学方法上,可以采用以下策略: 1. 案例驱动:通过实际...
1. ArrayList和Vector的主要区别在于线程安全和性能。ArrayList是非线程安全的,但插入和删除操作更快;而Vector是线程安全的,但在多线程环境下性能较好,但整体速度较慢。 2. ArrayList、Vector和LinkedList都是...