阅读量:4
在Java中,处理列表的并发操作需要使用线程安全的数据结构。Java提供了几种线程安全的数据结构,如Vector、Collections.synchronizedList()方法包装的列表以及ConcurrentHashMap.newKeySet()方法返回的集合。下面是一些示例:
- 使用Vector:
import java.util.Vector;
public class ConcurrentListExample {
public static void main(String[] args) {
Vector list = new Vector<>();
// 创建两个线程,分别向列表中添加元素
Thread t1 = new Thread(() -> {
for (int i = 0; i < 10; i++) {
list.add("Thread1-" + i);
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 10; i++) {
list.add("Thread2-" + i);
}
});
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Vector: " + list);
}
}
- 使用Collections.synchronizedList()包装列表:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ConcurrentListExample {
public static void main(String[] args) {
List list = Collections.synchronizedList(new ArrayList<>());
// 创建两个线程,分别向列表中添加元素
Thread t1 = new Thread(() -> {
for (int i = 0; i < 10; i++) {
list.add("Thread1-" + i);
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 10; i++) {
list.add("Thread2-" + i);
}
});
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Synchronized List: " + list);
}
}
- 使用ConcurrentHashMap.newKeySet()返回的集合:
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
public class ConcurrentListExample {
public static void main(String[] args) {
Set set = ConcurrentHashMap.newKeySet();
// 创建两个线程,分别向集合中添加元素
Thread t1 = new Thread(() -> {
for (int i = 0; i < 10; i++) {
set.add("Thread1-" + i);
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 10; i++) {
set.add("Thread2-" + i);
}
});
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("ConcurrentHashMap KeySet: " + set);
}
}
注意:在使用Collections.synchronizedList()包装列表时,需要注意对整个操作进行同步,以避免并发问题。例如,在上面的示例中,我们使用了join()方法来等待两个线程完成操作。而在使用ConcurrentHashMap.newKeySet()时,由于它本身是线程安全的,因此不需要额外的同步措施。
以上就是关于“java列表怎样处理并发操作”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm