我有一个场景,搜索了很多,但没有得到满意的答案。
有一个服务类,WebserviceInvokerService,
class WebserviceInvokerService {
@Override
public void synchronized callBackFun() {...}
}
callBackFun ==>是在事件(某个事件)发生时被调用的函数。
在callBackFun中,我检查数据库并相应地进行服务调用(此业务中不涉及该类的实例成员)。
我已使callBackFun同步。有可能会创建多个WebserviceInvokerService实例,并在这些对象上调用callBackFun。
我想调用callBackFun"同步"穿过物体。那么"同步"对于callBackFun,在这种情况下会有任何意义。
答案 0 :(得分:2)
要跨实例进行同步,您应该使用synchronized with static reference。
class WebserviceInvokerService {
@Override
public void callBackFun() {
synchronized(WebserviceInvokerService.class) {... }
}
}
答案 1 :(得分:2)
如果java多个实例WebserviceInvokerServices,这些方法将在每个实例中同步,但不会跨实例。
你可能正在寻找的是一个锁。
你可以试试这个:
private final static Lock lock = new ReentrantLock();
@Override
public void callBackFun() {
lock.lock();
try {
// Do things here
} finally {
lock.unlock();
}
}
编辑: 添加了@Wyzard
提到的final关键字答案 2 :(得分:-1)
由于callBackFun
不使用实例成员(根据帖子:该业务不涉及该类的实例成员)
您可以将此代码放在static synchronized
方法中,以便存在类级别锁定。从您的实例方法
public synchronized void callBackFun() {
actualFunLogic();
}
private static synchronized void actualFunLogic()
{
.....
}