private synchronized void mergeAndWrite() throws IOException { List<CheckpointData> ackedList = new ArrayList<CheckpointData>(); List<CheckpointData> removed = new ArrayList<CheckpointData>(); for (CheckpointData data : pending) { if (data.isAcked == true) { ackedList.add(data); removed.add(data); } else { break; } } pending.removeAll(removed); // TODO rety(tag)로 충분하나?. 순서대로 안왔을 때 보장은 안 해줘도 되나? for (CheckpointData data : ackedList) { for (String fileName : data.fileOffsets.keySet()) { fileOffsets.put(fileName, data.fileOffsets.get(fileName)); } } writeToFile(); }