已知ArrayList是非线程安全的,完成创建一个当前集合的线程安全版本集合的代码
时间: 2024-05-03 22:20:36 浏览: 11
可以使用以下代码创建一个线程安全版本的ArrayList:
```
List<Object> synchronizedList = Collections.synchronizedList(new ArrayList<Object>());
```
这里使用了Collections类的synchronizedList方法来创建一个同步的ArrayList,这样就可以保证在多线程环境下对该列表的访问是线程安全的。
相关问题
使用Java编写一个线程安全的集合
Java中提供了很多线程安全的集合类,例如ConcurrentHashMap、CopyOnWriteArrayList等,我们可以通过实现类似于这些集合类的方式来编写一个线程安全的集合。
以下是一个简单的例子:一个线程安全的列表,它支持添加和获取元素的操作。
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ThreadSafeList<E> {
private final List<E> list;
public ThreadSafeList() {
this.list = Collections.synchronizedList(new ArrayList<>());
}
public void add(E element) {
synchronized (list) {
list.add(element);
}
}
public E get(int index) {
synchronized (list) {
return list.get(index);
}
}
}
```
在这个例子中,我们使用了`Collections.synchronizedList()`方法来创建一个线程安全的列表,并使用`synchronized`关键字来保证对列表的操作是线程安全的。我们可以通过对`add()`和`get()`方法加锁来确保多个线程同时操作列表时不会出现问题。
如何把一个线程不安全的集合转化为线程安全集合?
可以使用Collections类的synchronizedList方法,将List转化为一个线程安全的集合。例如:
List<String> list = new ArrayList<>();
List<String> synchronizedList = Collections.synchronizedList(list);
这样,可以确保不同线程在对集合进行操作时,不会产生冲突。