ArrayList高并发相关内容

A.底层存放的是object类型
B.初始值是10,hashmap的初始值是16,linkedList的初始值是0
C.ArrayList扩容是原来的一半,第一次就扩容成15,第三次扩容是22;hashMap的扩容是原值的一倍,LinkedList每次添加一个
D.扩容使用的是Arrays.copyOf(int arr[],int newLength),第一个参数是旧数组,第二个参数是新数组长度
E.ArrayList是线程不安全
a.故障现象:写一段ArrayList线程不安全的代码

	List list=new ArrayList<>();
	for(int i=0;i<3;i++)
	{
	    new Thread(()->{
	        list.add(UUID.randomUUID().toString().substring(0,8));
	    }).start();
	 }
    Thread.sleep(1000);
    System.out.println(list.size());

b.导致原因 :多个线程并发争抢资源类
c.解决方法
怎样保证ArrayList的线程安全?
<1>.使用vector,vector 本身就是线程安全的,为什么有了线程安全的vector还要有线程不安全的ArrayList?线程安全会导致并发性降低
<2>.

//写时复制
List list=new CopyonWriteArrayList();

写时复制的原理:每次都将数据拷贝一份出来,将新数据加进去后再赋值给List,下面是源码
ArrayList高并发相关内容_第1张图片

你可能感兴趣的:(高并发)