zoukankan      html  css  js  c++  java
  • 验证ArrayList是线程不安全的集合

    package collectionSafe;

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;

    public class Test {
    /*
    在本例中,验证ArrayList是线程不安全的容器
    主要思路:
    循环同时开启1000个线程,每个线程的作用都是将自己的线程名add进Arraylist中,
    等待所有线程执行完后,打印ArrayList.size()是否等于1000,经验证ArrayList线程不安全!
    使用Collections中的方法synicronized系列可以将线程不安全的集合变成安全的。
    * */
    public static void main(String[] args) {
    List<String> arrayList = new ArrayList<>();
    //arrayList = Collections.synchronizedList(arrayList);//取消此行注释可以验证返回的集合是线程安全的!
    for (int i = 0; i < 10000; i++) {
    new Thread(new Write(arrayList)).start();
    }
    try {
    Thread.sleep(3000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    System.out.println(arrayList.size());
    }
    }

    class Write implements Runnable {
    List<String> arrayList;

    public Write(List<String> arrayList) {
    this.arrayList = arrayList;
    }

    @Override
    public void run() {
    arrayList.add(Thread.currentThread().getName());
    }
    }
  • 相关阅读:
    vue-cli脚手架 安装
    音视频
    移动端开发问题
    GIT提交命令清单
    关于cookie和$.cookie
    emoji表情进行编码以适配移动端用户emoji表情的输入和展示
    父组件如何使用子组件中的方法
    uniapp实现锚点跳转
    uniapp判断android还是iOS
    uniapp动态设置当前页面标题
  • 原文地址:https://www.cnblogs.com/lixin4395/p/10633703.html
Copyright © 2011-2022 走看看