zoukankan      html  css  js  c++  java
  • 35 多线程(七)——并发容器

    在java中,有一个专门用来处理并发容器的包:java.util.concurrent 包,其中有一个CopyOnWriteArrayList类,相当于ArrayList的线程安全版。

    我们可以使用它代替ArrayList,就无需加synchronized来锁线程了。

    注:本节内容了解即可(面试用),因为这是高级并发才会使用的,后期再来补充本文。

    先拿之前1w个线程往ArrayList容器添加内容的例子来看。

    代码:

    package _20191205;
    import java.util.List;
    import java.util.ArrayList;
    public class SynBlockTest02 {
    	public static void main(String[] args) {
    		List<String> list = new ArrayList<>();
    		
    		for(int i = 0;i < 10000;i++	) {
    		
    			new Thread(()->{
    				synchronized (list) {//重点在这里,synchronized代码要与被锁的对象被修改的地方尽可能近
    					list.add(Thread.currentThread().getName().toString());
    				}						
    			},"线程"+i).start();		
    		}
    		System.out.println("8s后输出结果");
    		try {
    			Thread.sleep(8000);
    		}catch(InterruptedException e) {
    			e.printStackTrace();
    		}
    		System.out.println(list.size());
    
    	}
    }
    

      

    然后我们就可以修改为线程版的ArrayList:

    导包,把ArrayList替换为CopyOnWriteArrayList,删掉synchronized同步块。

    package _20191205;
    import java.util.List;
    import java.util.ArrayList;
    import java.util.concurrent.CopyOnWriteArrayList;
    public class SynBlockTest06 {
    	public static void main(String[] args) {
    		CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
    		
    		for(int i = 0;i < 10000;i++	) {
    		
    			new Thread(()->{
    			  list.add(Thread.currentThread().getName().toString());
    			},"线程"+i).start();		
    		}
    		System.out.println("8s后输出结果");
    		try {
    			Thread.sleep(8000);
    		}catch(InterruptedException e) {
    			e.printStackTrace();
    		}
    		System.out.println(list.size());
    
    	}
    }
    

      

  • 相关阅读:
    通过this调用本类属性和本类方法
    使用构造方法接收引用数据类型
    JAVA回形数
    Bt(宝塔面板)忘记用户名密码的解决方案
    关于xshell远程连接密码呈现灰色无法填写的问题
    ubunt系统创建定时任务
    阿里云服务器如何初始化
    解决laravel 配置路由时除 “/”路由 以外 ,所有路由访问不到的情况
    laravel 5.2 使用 captcha 实现 验证码
    在laravel中如何使用事务
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/11994557.html
Copyright © 2011-2022 走看看