有没有大神在线程任务中使用过集合的forEach方法?
class syncMapTask implements Runnable {
private static Map<String, Object> map = Collections.synchronizedMap(new HashMap<>());
private Lock lock = new ReentrantLock();
static {
map.put("AAA", "AAA");
map.put("BBB", "BBB");
map.put("CCC", "CCC");
}
@Override
public void run() {
lock.lock();
String random = new Random().nextInt() + "";
try {
System.out.println("before............");
/* for (Map.Entry<String, Object> m : map.entrySet()) {
System.out.print(Thread.currentThread().getName() + "取出: " + m.getKey() + ":" + m.getValue());
}*/
/**
* 不晓得这一行为什么会失效,如果不再线程任务中,却是可以正常循环出来,这里如果使用了forEach,
* 看起来会直接终止所有的线程任务一样,后面的代码和线程再也不会执行,直接程序终止了。。。。。
*
*/
// map.forEach((k, v) -> System.out.println(Thread.currentThread().getName() + "取出" + k + "v"));
map.forEach((k, v) -> System.out.println(k + "v"));
System.out.println(",存入" + random);
map.put(random, random);
} finally {
lock.unlock();
}
}
}
如上是一个简单的线程任务类,加入线程执行后,如果使用增强for循环,代码应该是没有问题的,各个线程都能够顺利执行读取最新的map里面的值,可是如果循环使用了forEach方法,则控制台打印以下before...之后,线程任务就像死了一样的,然后就程序执行结束,控制台上什么都没有,forEach之后的代码也打印不了了,请问有大神知道这是为什么吗?