验证List线程的安全性

2019-01-04  本文已影响0人  LeonardoEzio

线程安全的定义

验证List的非线程安全

 public class ListSafeProveTwo {

    public static void main(String[] args) throws Exception{

        List<Integer> safe = Collections.synchronizedList(new ArrayList<>());//线程安全的List
        List<Integer> unsafe = new ArrayList<>();//非线程安全的list

        for (int i = 0 ; i<10 ; i++){//测试次数
            safe.clear();
            unsafe.clear();
            prove(unsafe, safe);
        }
    }

    public static void prove (List<Integer> unsafe , List<Integer> safe)throws Exception{
        for (int i = 0 ; i < 10000 ; i++){ //开启10000个线程,同时往List里面添加数据
            new Thread(new Runnable() {
                @Override
                public void run() {
                   unsafe.add(1);
                   safe.add(1);
                }
            }).start();
        }

        Thread.sleep(50); // 主线程休眠 , 为了给子线程足够的执行时间

        System.out.println("unsafe Size : "+ unsafe.size()+" | safe Size : "+ safe.size());
   }
}
上一篇 下一篇

猜你喜欢

热点阅读