在项目中遇到如下的问题,求赐教。
有三个应用:应用A、应用B、应用C都可以访问应用D,
应用A、B、C都有唯一的应用ID标示,假设为A、B、C。
同一应用对应用D的访问要做同步,不是同一应用的访问不做同步。
public void test(String funId) {
// 如果funId相同则同步,如果funId不同则不同步
}
在项目中遇到如下的问题,求赐教。
有三个应用:应用A、应用B、应用C都可以访问应用D,
应用A、B、C都有唯一的应用ID标示,假设为A、B、C。
同一应用对应用D的访问要做同步,不是同一应用的访问不做同步。
public void test(String funId) {
// 如果funId相同则同步,如果funId不同则不同步
}
这个问题,首先你要表达清楚,应用A、应用B、应用C是如何访问应用D的?
函数级调用还是其它方式?
调用者肯定是知道自己的应用ID,则调用时把自己的应用ID传递过去即可。
在应用D内部,为A、B、C各分配一个Lock,并构造相应的Map<应用ID, Lock>,有消息过来后,先根据应用ID获取对应的Lock,然后对Lock加锁。
D内部对A、B、C分别使用三个不同锁来进行控制,A、B、C同时调用D时,A、B、C之间是不会相互影响,而A同时调用D多次,这多次调用之间就会有同步控制。