`

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); 
        }
    }
}
分享到:
评论

相关推荐

    Java毕业设计-专利对比分析小程序-演示视频(高分期末大作业).rar

    该压缩包文件“Java毕业设计-专利对比分析小程序-演示视频(高分期末大作业).rar”包含了一个Java编程的毕业设计项目,主要是一个专利对比分析的小程序,并且附带了一个演示视频“专利对比分析小程序.mp4”。...

    java面试进阶讲义

    而 `ArrayList` 不提供内置的线程安全性,因此在多线程环境中需要外部同步机制。 - **性能**:由于 `Vector` 的同步特性,其性能通常低于 `ArrayList`,特别是在高并发环境下。如果不需要线程安全,推荐使用 `...

    Java-Java集合教程

    5. **ArrayList与LinkedList对比**: - ArrayList更适合于需要频繁访问元素的场合,而LinkedList适合于频繁进行插入和删除操作。 6. **HashSet与TreeSet对比**: - HashSet的性能通常优于TreeSet,因为其内部实现...

    数组进阶示例.rar

    7. **数组安全**:Java中的数组是线程不安全的,如果多个线程同时访问和修改数组,可能会导致数据不一致。"Test.java"可能展示了如何在多线程环境中正确使用数组,如使用synchronized关键字或者并发集合。 8. **...

    互联网大厂Java面试题合集

    ##### 4.1.3 ArrayList与LinkedList的对比 - **ArrayList**:基于数组实现,支持随机访问,适用于频繁的随机访问场景。 - **LinkedList**:基于双向链表实现,不适合随机访问,但插入和删除操作效率高。 ##### ...

    文本相似度对比器(Java)

    文本相似度对比是信息技术领域中的一个重要概念,尤其在信息检索、自然语言处理和教育防作弊系统中广泛应用。在这个Java程序中,它实现了对文本相似度的计算,以便于判断两个或多个文档之间的相似程度。下面将详细...

    ebao笔试题(2009_4_3)

    - 示例代码展示了如何通过继承 Thread 类来创建线程,并演示了一个具体的线程类 `testLabel` 的使用方法。 - 解答:在这个示例中,`testLabel` 类继承自 `Thread` 类,并重写了 `run()` 方法。当通过 `new ...

    Java编程思想【第4版】习题答案

    习题答案会演示如何编写并发程序,并避免常见的线程安全问题。 6. **输入/输出与文件操作**:Java的IO流体系使得处理数据输入输出变得简单,包括文件读写、序列化等。答案会展示各种IO操作的实现。 7. **泛型**:...

    effective-java 配套代码

    2. **单例模式(Singletons)**: 书中讨论了几种实现单例的方式,包括懒汉式、饿汉式、双检锁/双重校验锁(DCL)和静态内部类方式,对比了它们的优缺点和线程安全问题。 3. **构造函数与工厂方法(Constructors and...

    Java各种必备面试题目程序代码例子与应战技巧.zip

    - 实战代码:实现Runnable接口和Thread类,演示线程同步(synchronized)和并发工具类(如Semaphore、CountDownLatch)。 6. **IO流**: - 面试题:对比BufferedReader和Scanner的读取效率,解释NIO的特点。 - ...

    王者归来之达内内部绝密Java课件PPT

    2. 创建线程:通过实现Runnable接口和继承Thread类两种方式创建线程,并对比优缺点。 3. 线程同步:讲解synchronized关键字、wait/notify机制,以及Lock接口和ReentrantLock等高级同步工具。 六、I/O流 1. 流的概念...

    关于Java语言教学的思考.pdf

    Java提供的丰富的类库,如ArrayList和LinkedList,简化了数据结构的实现,便于教学演示和实践。 另外,采用项目驱动的教学模式也是提高Java教学效果的有效手段。例如,引入R0bocode大作业,让学生参与到实际项目...

    SimpleJava.pdf

    - **实例演示**:通过具体示例展示重写与重载的区别及应用。 #### 15. Java中的实例初始化器是什么? - **实例初始化块**:位于类体内部的代码块,用于初始化对象状态。 - **实例初始化顺序**:按照代码出现的顺序...

    java导学书中源代码

    1. List、Set、Queue接口及其实现类:例如ArrayList、LinkedList、HashSet、TreeSet等,理解它们的特点和使用场景。 2. Map接口及其实现类:如HashMap、TreeMap等,学习键值对存储和操作的方法。 五、输入/输出流 ...

    国家计算机二级JAVA考试大纲

    - **对象的生成与使用**:演示如何创建对象以及通过对象调用方法。 - **接口与包**:阐述接口的作用与实现方式,以及包的概念和使用。 - **Java类库的常用类和接口**:列举并简述常用的Java类和接口,如String、...

    c#经典实例100例

    4. **数组与集合**:数组用于存储固定数量的数据,而集合(如ArrayList、LinkedList、HashSet、Dictionary等)则允许动态地添加、删除元素。实例将展示它们的使用方法。 5. **LINQ(Language Integrated Query)**...

    C# 学习实例

    10. **多线程**:理解线程的基本概念,如何创建和管理线程,以及同步和互斥锁的使用,以避免线程安全问题。 11. **反射**:反射允许在运行时动态地获取类型信息并操作对象,是许多高级编程技术的基础。 12. **单元...

    《Java语言程序设计》基础篇 课后习题偶数题答案

    7. **集合框架**:Java集合框架包括List、Set、Map等接口及其实现类,如ArrayList、LinkedList、HashSet、HashMap等。了解这些集合的特性和使用方式是进阶Java编程的关键。 8. **函数式编程**:随着Java 8的发布,...

    深入.net平台和c#编程PPT-07

    10. **.NET Framework与.NET Core的对比**:随着.NET Core的推出,PPT可能会比较两者之间的异同,包括跨平台能力、依赖注入、性能优化等方面。 11. **代码调试与性能分析**:介绍Visual Studio中的调试工具和性能...

Global site tag (gtag.js) - Google Analytics