基于Collections.synchronizedList()创建一个线程安全的集合aList,然后利用aList.parallelStream写一个多线程的示例
时间: 2024-09-25 07:03:24 浏览: 58
基于`Collections.synchronizedList()`,你可以创建一个线程安全的ArrayList,这样当多个线程同时访问这个列表时,不会导致并发修改异常。首先,你需要导入`java.util.Collections`并同步列表:
```java
import java.util.ArrayList;
import java.util.Collections;
// 创建线程安全的ArrayList
List<String>-alist = Collections.synchronizedList(new ArrayList<String>());
```
接下来,你可以使用`aList.parallelStream()`来执行一个并行流操作。这里以计算字符串长度为例,但请注意,并不是所有操作都适合并行,因为并行处理需要有良好的分割策略,避免过多的上下文切换:
```java
public void parallelOperation() {
aList.parallelStream().forEach(str -> {
synchronized (alist) { // 为了保持线程安全,在并发修改时加锁
System.out.println("Thread " + Thread.currentThread().getId() + ": " + str.length());
}
});
}
```
在这个示例中,`forEach`会将任务分配给多个线程同时执行,每个线程在计算字符串长度后打印结果。但由于`synchronizedList()`的存在,保证了在遍历过程中不会产生数据竞争。
阅读全文