首页 > 代码库 > ArrayLLis 线程不安全的学习(需要修改)

ArrayLLis 线程不安全的学习(需要修改)

package 线程安全测试;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

 

class  Output implements Runnable
{
    private ArrayList<Integer> array=null;
    public Output(List<Integer> list)
    {
        array=(ArrayList<Integer>) list;
       
       
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(array.size()>0)
        {
           
            int a=array.remove(0);
            try {
                Thread.sleep((long) (1000*Math.random()));
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"线程取走了数据"+array.size());
           
        }
       
    }
   
   
   
}

public class ArraryListTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList<Integer> arry=new ArrayList<Integer>();
        for(int i=0;i<100;i++)
        {
           
            arry.add(i);
        }
       
        Output output=new Output(arry);
    ExecutorService pool=Executors.newFixedThreadPool(10);
    Thread t1=new Thread(output);
    Thread t2=new Thread(output);
    Thread t3=new Thread(output);
    pool.execute(t1);
    pool.execute(t2);
    pool.execute(t3);
    pool.shutdown();
   

    }

}
测试结果

package 线程安全测试;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

 

class  Output implements Runnable
{
    private ArrayList<Integer> array=null;
    public Output(List<Integer> list)
    {
        array=(ArrayList<Integer>) list;
       
       
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(array.size()>0)
        {
           
            int a=array.remove(0);
            try {
                Thread.sleep((long) (1000*Math.random()));
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"线程取走了数据"+array.size());
           
        }
       
    }
   
   
   
}

public class ArraryListTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList<Integer> arry=new ArrayList<Integer>();
        for(int i=0;i<100;i++)
        {
           
            arry.add(i);
        }
       
        Output output=new Output(arry);
    ExecutorService pool=Executors.newFixedThreadPool(10);
    Thread t1=new Thread(output);
    Thread t2=new Thread(output);
    Thread t3=new Thread(output);
    pool.execute(t1);
    pool.execute(t2);
    pool.execute(t3);
    pool.shutdown();
   

    }

}

pool-1-thread-3线程取走了数据97
pool-1-thread-2线程取走了数据96
pool-1-thread-3线程取走了数据95
pool-1-thread-1线程取走了数据94
pool-1-thread-1线程取走了数据93
pool-1-thread-1线程取走了数据92
pool-1-thread-3线程取走了数据91
pool-1-thread-2线程取走了数据90
pool-1-thread-2线程取走了数据89
pool-1-thread-3线程取走了数据88
pool-1-thread-2线程取走了数据87
pool-1-thread-1线程取走了数据86
pool-1-thread-1线程取走了数据85
pool-1-thread-3线程取走了数据84
pool-1-thread-2线程取走了数据83
pool-1-thread-3线程取走了数据82
pool-1-thread-2线程取走了数据81
pool-1-thread-1线程取走了数据80
pool-1-thread-2线程取走了数据79
pool-1-thread-3线程取走了数据78
pool-1-thread-2线程取走了数据77
pool-1-thread-1线程取走了数据76
pool-1-thread-2线程取走了数据75
pool-1-thread-3线程取走了数据74
pool-1-thread-3线程取走了数据73
pool-1-thread-1线程取走了数据72
pool-1-thread-2线程取走了数据71
pool-1-thread-3线程取走了数据70
pool-1-thread-2线程取走了数据69
pool-1-thread-1线程取走了数据68
pool-1-thread-2线程取走了数据67
pool-1-thread-1线程取走了数据66
pool-1-thread-1线程取走了数据65
pool-1-thread-3线程取走了数据64
pool-1-thread-2线程取走了数据63
pool-1-thread-3线程取走了数据62
pool-1-thread-1线程取走了数据61
pool-1-thread-1线程取走了数据60
pool-1-thread-1线程取走了数据59
pool-1-thread-3线程取走了数据58
pool-1-thread-2线程取走了数据57
pool-1-thread-2线程取走了数据56
pool-1-thread-2线程取走了数据55
pool-1-thread-1线程取走了数据54
pool-1-thread-2线程取走了数据53
pool-1-thread-2线程取走了数据52
pool-1-thread-1线程取走了数据51
pool-1-thread-3线程取走了数据50
pool-1-thread-1线程取走了数据49
pool-1-thread-2线程取走了数据48
pool-1-thread-2线程取走了数据47
pool-1-thread-3线程取走了数据46
pool-1-thread-1线程取走了数据45
pool-1-thread-3线程取走了数据44
pool-1-thread-2线程取走了数据43
pool-1-thread-3线程取走了数据42
pool-1-thread-1线程取走了数据41
pool-1-thread-1线程取走了数据40
pool-1-thread-2线程取走了数据39
pool-1-thread-3线程取走了数据38
pool-1-thread-3线程取走了数据37
pool-1-thread-2线程取走了数据36
pool-1-thread-1线程取走了数据35
pool-1-thread-3线程取走了数据34
pool-1-thread-2线程取走了数据33
pool-1-thread-1线程取走了数据32
pool-1-thread-2线程取走了数据31
pool-1-thread-2线程取走了数据30
pool-1-thread-3线程取走了数据29
pool-1-thread-2线程取走了数据28
pool-1-thread-1线程取走了数据27
pool-1-thread-3线程取走了数据26
pool-1-thread-1线程取走了数据25
pool-1-thread-2线程取走了数据24
pool-1-thread-2线程取走了数据23
pool-1-thread-3线程取走了数据22
pool-1-thread-3线程取走了数据21
pool-1-thread-3线程取走了数据20
pool-1-thread-2线程取走了数据19
pool-1-thread-1线程取走了数据18
pool-1-thread-3线程取走了数据17
pool-1-thread-3线程取走了数据16
pool-1-thread-2线程取走了数据15
pool-1-thread-2线程取走了数据14
pool-1-thread-2线程取走了数据13
pool-1-thread-2线程取走了数据12
pool-1-thread-3线程取走了数据11
pool-1-thread-1线程取走了数据10
pool-1-thread-1线程取走了数据9
pool-1-thread-1线程取走了数据8
pool-1-thread-2线程取走了数据7
pool-1-thread-3线程取走了数据6
pool-1-thread-3线程取走了数据5
pool-1-thread-3线程取走了数据4
pool-1-thread-1线程取走了数据3
pool-1-thread-2线程取走了数据2
pool-1-thread-1线程取走了数据1
pool-1-thread-3线程取走了数据0
pool-1-thread-1线程取走了数据0
pool-1-thread-2线程取走了数据0

本来只能出现0到99,只出现一次