Vik*_*Vik 7 java concurrency multithreading data-structures oracle-maf
我正在使用 LinkedHashMap 并且环境是多线程的,因此该结构需要是线程安全的。在特定事件期间,我需要读取整个地图推送到数据库并清除所有内容。
大多数时候只有写入发生在这张地图上。该地图的条目限制为 50 个。
我正在使用 Oracle MAF,但它没有可用的 Collections.syncronizedMap。那么,我需要在同步块中放入哪些内容,以确保写入和读取不会出现并发修改异常等
几个要求:
那么,我需要在同步块中放入哪些内容,以确保写入和读取不会出现并发修改异常等
所有方法调用都应该在同步块中。
棘手的是迭代器的使用,因为您必须在迭代器的生命周期内保持锁定。例如
// pre Java 5.0 code
synchronized(map) { // the lock has to be held for the whole loop.
for(Iterator iter = map.entrySet().iterator(); iter.hashNext(); ) {
Map.Entry entry = iter.next();
String key = (String) entry.getKey();
MyType value = (MyType) entry.getValue();
// do something with key and value.
}
}
Run Code Online (Sandbox Code Playgroud)