`
sunrise353
  • 浏览: 75716 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

验证ArrayList为线程不安全以及解决方法

    博客分类:
  • J2SE
阅读更多
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 的源码和多线程安全问题,并通过示例代码进行了详细的分析。 ArrayList 源码分析 ArrayList 的源码主要由以下几个部分组成:数据...

    ArrayList测试.

    2. 安全性:ArrayList是非线程安全的,如果多个线程同时操作,可能会导致数据不一致。在多线程环境下,可以使用`ArrayList.Synchronized()`创建一个线程安全的版本,或者使用线程安全的集合类,如`ConcurrentBag&lt;T&gt;`...

    用C语言模拟ArrayList

    在C语言中,ArrayList是一种常见的数据结构,它模拟了Java或.NET等高级语言中的动态数组。ArrayList提供了在数组中添加...在实际应用中,我们还需要考虑错误处理、线程安全以及优化等问题,以确保代码的健壮性和效率。

    Java多线程与线程安全实践-基于Http协议的断点续传.zip

    此外,为防止因网络问题导致的不完整下载,可能需要定期检查并验证已下载的部分,或者实现一种回滚机制。 总的来说,这个资料包可能包含有关如何在Java中实现多线程下载,利用HTTP断点续传技术优化大文件传输,以及...

    多线程.rar

    4. **线程安全类**:如ArrayList不是线程安全的,而Vector和CopyOnWriteArrayList是线程安全的,比较它们在多线程环境下的优劣。 5. **死锁示例**:模拟死锁情况,分析并解决死锁问题,理解死锁条件。 6. **线程...

    01大数据面试复习----Java基础---集合类、多线程、JVM.zip

    在准备大数据面试的过程中,Java基础是必不可少的一部分,尤其聚焦于集合类、多线程和JVM这三大核心领域。下面将分别对这三个方面进行深入探讨。 **一、Java集合类** Java集合框架是处理对象组的重要工具,它包括...

    java线程扫描ip地址

    实现`Runnable`接口可以创建一个不包含自己的线程的类。`InitSystem`类实现了`Runnable`接口,它的`run()`方法包含了IP扫描逻辑。 5. **多线程同步**: 使用`volatile`关键字修饰`arrayThread`、`arrayIP`和`...

    一个线程oom会影响其他线程吗1

    为了验证一个线程抛出 OOM 异常是否会影响其他线程的运行,我们编写了以下测试代码: ```java new Thread(() -&gt; { List[]&gt; list = new ArrayList[]&gt;(); while (true) { System.out.println(new Date().toString...

    简单测试代码

    1. **线程不安全**:ArrayList不是线程安全的,因此在多线程环境下直接操作可能会导致数据不一致。如果需要线程安全,可以考虑使用CopyOnWriteArrayList。 2. **随机访问**:由于ArrayList基于数组,所以可以通过...

    基于java的开发源码-多线程反射泛型及正则表达式学习笔记和源码.zip

    线程间的通信和同步是多线程编程的关键,Java提供了synchronized关键字、wait()、notify()和notifyAll()方法、Lock接口(如ReentrantLock)等工具来确保线程安全。在学习笔记中,你可能会看到如何创建、启动、控制和...

    JAVA经典问题自己写程序验证

    在Java编程领域,经典问题通常涉及算法、数据结构和设计模式等核心概念,这些问题的解决有助于提升编程技能和深入理解Java语言。以下是一些常见的Java经典问题及其详细解析: 1. **数组与集合操作**: - 数组是...

    Java泛型与容器详细笔记.pdf (带书签)

    由于ArrayList不是线程安全的,它更适用于单线程环境下,或者多线程环境下有外部同步手段的场景。 LinkedList基于双向链表实现,链表的插入和删除操作不需要移动元素,只需要改变相邻节点的指针即可,因此在列表...

    有关Java的学习总结,到多线程

    通过系统地学习以上知识点,你可以逐步掌握Java编程,并为后续的多线程编程打下坚实的基础。多线程编程涉及到进程间通信、死锁预防、线程安全等问题,需要深入理解线程的本质和Java提供的多线程支持机制。不断实践和...

    后端开发基础知识整理JAVA、JVM、操作系统、网络、设计模式、mysql、redis、多线程、spring、springboo

    - **ArrayList、LinkedList、Vector的区别**:ArrayList基于数组实现,LinkedList基于双向链表,Vector线程安全但效率低。 - **ArrayList用于多线程**:非线程安全,需手动同步。 - **HashMap原理**:基于哈希表实现...

    基于数据结构与简化内存模型的Java集合教学方法研究.zip

    例如,ArrayList不是线程安全的,因此在多线程环境中直接操作可能会导致数据不一致。而ConcurrentHashMap是线程安全的,适用于高并发环境下的键值存储。 在教学方法上,可以采用以下策略: 1. 案例驱动:通过实际...

    互联网大厂Java高级工程师岗位面试真题154道

    1. ArrayList和Vector的主要区别在于线程安全和性能。ArrayList是非线程安全的,但插入和删除操作更快;而Vector是线程安全的,但在多线程环境下性能较好,但整体速度较慢。 2. ArrayList、Vector和LinkedList都是...

Global site tag (gtag.js) - Google Analytics