pet*_*ter 2 java concurrency multithreading iterator
据我所知,有两种方法可以避免ConcurrentModificationException,而一个线程迭代集合,另一个线程修改集合.
我想知道还有其他选择吗?因为第一种显而易见的方式是不受欢迎的,而且性能很差,如果集合很大,其他线程可能会等待很长时间.第二种方式我不确定,因为我们克隆集合,并迭代副本,所以如果其他线程进来并修改原始的,那么复制的一个变得陈旧吧?这是否意味着我们需要通过克隆重新开始并在修改后再次迭代它?
我想知道还有其他选择吗?
使用其中一个不会抛出此异常的并发集合.相反,他们提供弱一致性.即迭代时可能会或可能不会出现添加或删除元素.
http://docs.oracle.com/javase/tutorial/essential/concurrency/collections.html
java.util.concurrent包中包含许多Java Collections Framework的附加内容.这些最容易通过提供的集合接口进行分类:
- BlockingQueue定义了先进先出数据结构,当您尝试添加到完整队列或从空队列中检索时,该数据结构会阻塞或超时.
- ConcurrentMap是java.util.Map的子接口,它定义了有用的原子操作.仅当密钥存在时,这些操作才会删除或替换键值对,或仅在密钥不存在时才添加键值对.使这些操作原子化有助于避免同步.ConcurrentMap的标准通用实现是ConcurrentHashMap,它是HashMap的并发模拟.
- ConcurrentNavigableMap是ConcurrentMap的子接口,支持近似匹配.ConcurrentNavigableMap的标准通用实现是ConcurrentSkipListMap,它是TreeMap的并发模拟.
| 归档时间: |
|
| 查看次数: |
581 次 |
| 最近记录: |