ArrayList 线程不安全的体现

标签: ArrayList ArrayList线程不安全
10人阅读 评论(0) 收藏 举报
分类:

ArrayList 线程不安全的体现

标签(空格分隔): j2se


  ArrayList 是线程不安全,主要体现在add时,当只有一个线程时,添加元素时,size++ ,size每次增加1,当有线程A,B,线程A,B添加元素,当size =0 ,当线程A休眠,线程B执行也是从size = 0开始的,这样增加的量就啊2了。

image_1cb6hmefl1j671cbo142kb7b1dle9.png-50.3kB

/**
 * ArrayList线程不安全,体现在,添加元素时
 * @author zenxin
 *
 */
public class ArrayListThread implements Runnable{
    //线程不安全
    private static List<String> list = new ArrayList<>();

       //线程安全  
   /* private  List<String> list = Collections.synchronizedList(new ArrayList());  */
    public static void main(String[] args) {
        ArrayListThread target = new ArrayListThread(); 
        for(int i =1;i<100;i++){
            Thread thread = new Thread(target);
            thread.start();
        }

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         for(int i = 0; i < target.list.size(); i++){  
                if(target.list.get(i) == null){  
                    System.out.println();;  
                }  
                System.out.print(target.list.get(i) + "  ");  
            }  

    }

    @Override
    public void run() {

        try {
            Thread.sleep(20);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    //将当前线程的名字添加到list里面
    list.add(Thread.currentThread().getName());

    }
}

执行结果:
image_1cb6ip0ft19s911rj1ks0j5g151tm.png-20.9kB

查看评论

ArrayList线程不安全详解

首先需要了解什么是线程安全:线程安全就是说多线程访问同一代码(对象、变量等),不会产生不确定的结果。 既然说ArrayList是线程不安全的,那么在多线程中操作一个ArrayList对象,则会出现不确...
  • zhangxin961304090
  • zhangxin961304090
  • 2015-07-08 15:33:19
  • 1954

线程不安全的ArrayList

概述java.util.ArrayList不是线程安全的,当有多个线程并发读写ArrayList的时候,ArrayList会抛出如下异常java.util.ConcurrentModification...
  • linsongbin1
  • linsongbin1
  • 2017-01-15 23:02:49
  • 798

为什么说ArrayList是线程不安全的?

首先说一下什么是线程不安全:线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。...
  • jiaochunyu1992
  • jiaochunyu1992
  • 2016-04-18 09:51:04
  • 15618

ArrayList线程不安全分析

一个 ArrayList ,在添加一个元素的时候,它可能会有两步来完成: 1. 在 Items[Size] 的位置存放此元素; 2. 增大 Size 的值。  在单线程运行的情况下,如果 Si...
  • agfagafsdfas
  • agfagafsdfas
  • 2014-04-07 20:29:27
  • 634

解决ArrayList线程不安全

http://blog.csdn.net/sdefzhpk/article/details/7310499  前些天做项目时,程序出现意外的问题,经后来分析是使用ArrayList这...
  • thinkinwm
  • thinkinwm
  • 2013-10-28 14:52:56
  • 593

ArrayList在添加元素的时候会出现的一些线程不安全的现象

再学习多线程编程的时候,看到如下代码。 package com.cbf4life; import java.util.*; public class ThreadSafeDemo { ...
  • a1522365779
  • a1522365779
  • 2017-06-06 11:11:11
  • 517

ArrayList与LinkedList, 以及线程问题

    对于处理一列数据项,Java提供了两个类ArrayList和LinkedList,ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更像数组,但LinkedList...
  • tree1212
  • tree1212
  • 2009-04-13 13:00:00
  • 4866

线程安全和不安全的分析

作者:叉叉哥   转载请注明出处:http://blog.csdn.net/xiao__gui/article/details/8934832 ArrayList和Vector有什么区别?H...
  • w2393040183
  • w2393040183
  • 2016-09-02 11:47:48
  • 1276

HashMap线程不安全在哪里

线程不安全如果多个线程同时访问这个Map,而且至少一个线程对Map进行结构性的修改(增加,删除操作,update不算),那么它必须在外部进行同步。比如一个线程对HashMap进行扩容,另外一个线程读取...
  • zly9923218
  • zly9923218
  • 2016-05-25 12:42:05
  • 2739

HashMap的线程不安全体现

为什么都说HashMap是线程不安全的呢?它在多线程环境下,又会发生什么情况呢?resize死循环我们都知道HashMap的初始容量是16,一般来说,当插入数据时,都会检查容量有没有超过设定的thre...
  • jim__charles
  • jim__charles
  • 2016-12-19 21:09:56
  • 1212
    个人资料
    持之以恒
    等级:
    访问量: 4236
    积分: 623
    排名: 8万+
    文章存档