3

我有一个基于 CXF 的 Web 服务,使用单向方法说:Service.report()

在处理来自客户端的报告()时,我想让来自同一客户端 IP 的另一个传入报告()等到处理第一个请求。从客户端看,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 回答