迭代器被设计成每次仅由一个线程使用。
来源:互联网 发布:先锋刻录机刻录软件 编辑:程序博客网 时间:2024/05/19 10:12
ConcurrentHashMap 文档中这句的意思,应该是不要同时两个线程使用迭代器,否则会重复迭代到同一元素,又或者丢失迭代的一些元素。
可多次跑示例代码观察不同结果
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.Semaphore;
public class ConcurrentHashMapThreadTest {
public static volatile int num = 0;
public static Semaphore sem = new Semaphore(1);
public static void main(String[] args) {
ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>();
map.put("1", "goodest");
map.put("2", "badest");
map.put("3", "Lucy");
map.put("4", "Betty");
map.put("5", "but");
map.put("6", "you");
map.put("7", "and");
map.put("8", "me");
CyclicBarrier bar = new CyclicBarrier(2);
Iterator<String> it = map.values().iterator();
new Thread(() -> {
try {
bar.await();
} catch (Exception e) {
e.printStackTrace();
}
while (it.hasNext()) {
num++;
String value = it.next();
System.out.printf("get a value=%s,thread=%s\n", value, Thread.currentThread().getName());
}
}).start();
new Thread(() -> {
try {
bar.await();
} catch (Exception e) {
e.printStackTrace();
}
while (it.hasNext()) {
num++;
String value = it.next();
System.out.printf("get a value=%s,thread=%s\n", value, Thread.currentThread().getName());
;
}
}).start();
}
}
- 迭代器被设计成每次仅由一个线程使用。
- 设计四个线程,其中两个线程每次对j+1,两个线程每次 j-1
- 转[翻译]案例学习:仅使用Redis+PHP设计实现一个简单的Twitter
- [翻译]案例学习:仅使用Redis+PHP设计实现一个简单的Twitter
- 记录一点关于list每次以指定的间距分割的代码,仅做一个记录
- 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。
- 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1
- 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1
- 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。
- 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1
- 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。
- 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1.
- 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1
- 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1
- 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。
- 设计2个线程1个线程每次对i加1,另一个线程每次对i减去1
- 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1.
- 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。
- leaflet加载国家天地图服务
- libevent代码阅读(11)——“hello-world.c”之 进入事件多路分发循环
- Windows如何修改MySQL用户root密码
- linux常用命令
- 发送激活邮件
- 迭代器被设计成每次仅由一个线程使用。
- git使用详解 terminal命令/sourceTree/Xcode
- Retrofit 2.0使用详解,配合OkHttp、Gson,Android最强网络请求框架
- BAT解密:互联网技术发展之路(7)- 网络层技术剖析
- ios多线程死锁解析
- [LeetCode] Peeking Iterator
- vi编辑器的使用方法
- JPush中open Notification的不同通知跳转不同页面的处理
- IOC容器——Unity