我有一个带有动作侦听器的类(作为JSF托管bean的一部分)。动作侦听器中的代码正在创建另一个类的新对象。 A级
该对象用于调用此类的功能。
public void invokeActionListener(ActionEvent act)
{
MyClass myclass=new MyClass();
myclass.invokeRequest();
}
处理一些数据后,invokeRequest函数又调用另一个函数B。函数B调用另一个函数C。C调用D,然后流程结束。
我想确保,在D结束之前,仅应调用一次invokeRequest直到完整流程为止。
我对函数invokeRequest()进行了同步,但是同步不起作用。即使有1个线程仍在工作,不同的线程也能够调用此函数。
Class MyClass
{
public synchronized void invokeRequest()
{
invokeRequestB();
}
public void invokeRequestB()
{
invoke RequestC();
}
public void invokeRequestC()
{
invoke RequestD();
}
public void RequestD()
{
//Complete processing and end the flow.
}
请指导.....
最佳答案
同步方法将其各自的对象用于锁定。如果需要防止在不同对象中进行同步调用,则仍需要使用同一对象进行同步。一种方法是使用静态字段进行同步:
Class MyClass {
private static final Object lock = new Object();
public void invokeRequest() {
synchronized (lock) {
invokeRequestB();
}
}
...
}
或者,您可以使用
MyClass.class
作为监视对象;使用您发现更具可读性的内容。