我有一个基于CXF的Web服务,使用单向方法说: Service.report()
当正在处理来自客户端的报告()时,我想从同一客户端IP等待另一个传入报告(),直到第一个请求被处理。从客户端看,report()是一个原子操作,应该按顺序处理对report()的连续调用。
我怎样才能最好地实现这种锁定机制?我是否需要实现每个客户端队列,还是有一种简单的方法来实现这一目标?
答案 0 :(得分: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.
}
}