欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ArrayList 线程不安全的体现

程序员文章站 2024-03-26 09:32:29
...

ArrayList 线程不安全的体现


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

ArrayList 线程不安全的体现

/**
 * 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());

    }
}

执行结果:
ArrayList 线程不安全的体现