3

一方向のメソッドを持つ CXF ベースの Web サービスがあります: Service.report()

クライアントからの report() が処理されている間、同じクライアント IP からの別の受信 report() を、最初のリクエストが処理されるまで待機させたいと考えています。クライアントから見ると、report() はアトミック操作であり、report() への連続する呼び出しは順次処理する必要があります。

このロック メカニズムを最適に実装するにはどうすればよいですか? クライアントごとのキューを実装する必要がありますか、またはこれを実現する簡単な方法はありますか?

4

1 に答える 1

1

これには本格的なキューは必要ありません。単純なオブジェクトの同期が機能するはずです

static ConcurrentMap syncMap = new ConcurrentHashMap();

public void report()
{
   String clientIp =  ...
   syncMap.putIfAbsent(clientIp, new Object()); // just new Object is good enough to sync on
   synchronized(syncMap.get(clientIp))
   {
      //do synchronized stuff.
   }
}
于 2012-07-02T21:26:15.663 に答える