I want to write an multi-thread application that access LinkedHashMap with get() method (Application only get data from LinkedHashMap using get() method). The source code as below:
public class Thread1 implements Runnable {
LinkedHashMap<String, ArrayList<GroupMembers>> group;
public Thread1(LinkedHashMap<String, ArrayList<GroupMembers>> _group) {
group = _group
}
public void run() {
while (true) {
Set<String> groupKeyNames = group.keySet();
for (String groupName : groupKeyNames) {
ArrayList<GroupMembers> members = group.get(groupName);
/* Thread 1 processing */
...
}
}
}
}
public class Thread2 implements Runnable {
LinkedHashMap<String, ArrayList<GroupMembers>> group;
public Thread2(LinkedHashMap<String, ArrayList<GroupMembers>> _group) {
group = _group
}
public void run() {
while (true) {
Set<String> groupKeyNames = group.keySet();
for (String groupName : groupKeyNames) {
ArrayList<GroupMembers> members = group.get(groupName);
/* Thread 2 processing */
...
}
}
}
}
public class Sample {
public static void main(String[] args) throws IOException {
/* Init LinkedHashMap */
LinkedHashMap<String, ArrayList<GroupMembers>> group;
group.put("group1", new ArrayList<GroupMembers>());
group.put("group2", new ArrayList<GroupMembers>());
...
Thread1 t1 = new Thread(group);
t1.start();
Thread1 t1 = new Thread(group);
t2.start();
}
}
Is it safe to use LinkedHashMap.get() in above multi-thread application?