import java.util.ArrayList;
import java.util.UUID;
/** * @description: ArrayList线程不安全的代码示例 * @author: xz */
public class ContainerNotSafe {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
//模拟10个线程,往ArrayList集合中添加数据
for(int i=1;i<=10;i++){
new Thread(()->{
list.add(UUID.randomUUID().toString().substring(0,8));
System.out.println(list);
}).start();
}
}
}
import java.util.*;
/** * @description: 通过vector集合类解决集合类ArrayList线程不安全问题 * @author: xz */
public class ContainerNotSafe {
public static void main(String[] args) {
Vector<String> list = new Vector<>();
//模拟10个线程,往Vector集合中添加数据
for(int i=1;i<=10;i++){
new Thread(()->{
list.add(UUID.randomUUID().toString().substring(0,8));
System.out.println(list);
}).start();
}
}
}
(1)、Vector集合类于JDK1.0版本出现,Vector通过加锁的方式实现,保证了数据一致性,但是并发性下降。
(2)、ArrayList集合类于JDK1.2版本出现。ArrayList为了杜绝了Vector的情况,是一种不加锁的集合类,并发性加强,但是不保证线程的安全性。
import java.util.*;
/** * @description: 通过Collections工具类解决集合类ArrayList线程不安全问题 * @author: xz */
public class ContainerNotSafe {
public static void main(String[] args) {
List<String> list=Collections.synchronizedList(new ArrayList<>());
//模拟10个线程,往synchronizedList集合中添加数据
for(int i=1;i<=10;i++){
new Thread(()->{
list.add(UUID.randomUUID().toString().substring(0,8));
System.out.println(list);
}).start();
}
}
}
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
/** * @description: 通过JUC包下的写时复制集合类解决ArrayList线程不安全问题 * @author: xz */
public class ContainerNotSafe {
public static void main(String[] args) {
List<String> list=new CopyOnWriteArrayList<>();
//模拟10个线程,往ArrayList集合中添加数据
for(int i=1;i<=10;i++){
new Thread(()->{
list.add(UUID.randomUUID().toString().substring(0,8));
System.out.println(list);
}).start();
}
}
}
public boolean add(E e) {
final ReentrantLock lock = this.lock;
lock.lock();
try {
Object[] elements = getArray();
int len = elements.length;
Object[] newElements = Arrays.copyOf(elements, len + 1);
newElements[len] = e;
setArray(newElements);
return true;
} finally {
lock.unlock();
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://wwwxz.blog.csdn.net/article/details/122442016
内容来源于网络,如有侵权,请联系作者删除!