私は与えられたIDを持つサンプルに行わリビジョンのマップを保持し、コードの一部を持っている:TreeMapを使用して、指定されたキー値より上のすべてのキー/値ペアを取得できますか?
private Map<Long, SampleId> sampleRevisionMap = new HashMap<>();
これを維持しながら、他のスレッドが与えられたリビジョン番号以降に行われたすべての変更を取得するためで呼び出すことができます。
public Set<SampleId> getRevisionIDs(long clientRevision) {
return sampleRevisionMap.entrySet().stream()
.filter(k -> k.getKey() > clientRevision)
.map(entry -> entry.getValue())
.collect(Collectors.toSet());
}
つまり、すべての値にしきい値を超えるキーを付けてください。
これを行うには、順序付けされたマップ、つまりjava.utils.TreeMapを使用するより良い方法があります。
TreeMapが同期されていないことに注意してください。すべてのスレッドがキーと値のペアを読み込むことができます。 'syncMap = Collections.synchronizedSortedMap(treeMap)'を使用する必要があります – SomeDude
'synchronizedSortedMap'からの返り値マップは変更可能であり、あるスレッドがそれを反復している間に他のスレッドが変更できます)。反復スレッドは、それを反復処理するスレッドで同期する必要があります。 ['synchronizedSortedMap'のドキュメント(https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#synchronizedSortedMap-java.util.SortedMap-)を参照してください。 – Lii