Java并发编程:集合、问题与解决方案
1. 循环屏障的复用
循环屏障(CyclicBarrier)被打破后,所有线程会被释放,等待该屏障的线程数量会归零。此时,循环屏障可再次用于一组新的等待线程。例如,若循环屏障的限制为5,有15个线程调用 await() 方法,那么循环屏障将总共被激活三次。
2. 使用并发集合
并发API除了管理线程外,还包含一些接口和类,可帮助协调多个任务对共享集合的访问。这里的集合指的是Java集合框架。以下将介绍使用并发API时可用的一些并发类。
2.1 理解内存一致性错误
并发集合类的目的是解决常见的内存一致性错误。当两个线程对同一数据的视图不一致时,就会发生内存一致性错误。理想情况下,一个线程的写操作应在另一个线程访问并发集合时对其可见。
当两个线程尝试修改同一个非并发集合时,JVM可能在运行时抛出 ConcurrentModificationException 异常,单线程操作也可能出现这种情况。示例代码如下:
var foodData = new HashMap<String, Integer>();
foodData.put("penguin", 1);
foodData.put("flamingo", 2);
for(String key: foodData.keySet())
foodData.remove(key);
上述代码在循环的第二次迭代时会抛出 ConcurrentMod
订阅专栏 解锁全文
3103

被折叠的 条评论
为什么被折叠?



