Java: Synchronisation auf primitive?

In unserem system, wir haben eine Methode, tun einige Arbeit, wenn es heißt, mit einer bestimmten ID:

public void doWork(long id) { /* ... */ }

Nun, diese arbeiten zu können, gleichzeitig für verschiedene IDs, aber wenn die Methode aufgerufen wird, mit der gleichen ID von 2 threads, ein thread gesperrt werden sollte, bis es fertig ist.

Die einfachste Lösung wäre, eine Karte zu haben, dass Karten aus der Langen ID zu einem beliebigen Objekt, können wir die Sperre auf. Ein problem, das ich sehe ist, dass Sie wir haben Tonnen von IDs im system, und diese Karte wird weiter wachsen, jeden Tag.

Ideal, ich denke, wir brauchen ein system, in dem wir jeder thread holt sich ein Objekt sperren, sperren Sie, wenn möglich, die Arbeit zu tun, dann signalisieren, dass wir fertig sind mit dem Schloss. Wenn klar ist, dass niemand anderes mit dieser besonderen sperren, dann kann sicher entfernen Sie es aus die Karte sperren zu verhindern, dass der memory-leak.

Ich mir vorstellen, das muss ein ziemlich häufiges Szenario, ich hoffe also, dass es eine bereits vorhandene Lösung gibt. Weiss jemand eine?

  • Wie werden diese id-Nummern produziert? Wenn es eine Vermittlung von diesen IDs nur aus der hand-Objekte anstelle von primitiven, die Sie verwenden können, diejenigen, die für die Verriegelung/Synchronisation.
  • Siehe auch stackoverflow.com/q/6616141/32453
Schreibe einen Kommentar