什么时候托管bean的方法应该同步?

Ioa*_*oan 2 jsf thread-safety managed-bean

如果此方法被commandButton组件作为AJAX请求调用,并且该方法是在托管bean的实例变量上运行,那么我们是否必须同步托管bean方法?

假设我们有这个简单的托管bean:

public class ManagedBeanTest {

  private int count;

  public int getCount() {
    return count;
  }

  public void setCount(int count) {
    this.count = count;
  }

  public String increaseCount() {
    count++;
    return null;
  }

}
Run Code Online (Sandbox Code Playgroud)

因此,如果在这种情况下该increaseCount方法由commandButton内部组件调用action,我是否必须同步此方法?

谢谢您的回答.

Bal*_*usC 5

什么时候托管bean的方法应该同步?

当托管bean放入错误的范围时.因此,在适当设计的应用程序中,永远不会.

您的特定示例中,您应该使用AtomicInteger而不是int可能还有一堆synchronized修饰符.

private AtomicInteger count = new AtomicInteger();

public int getCount() {
    return count.get();
}

public void incrementCount() {
    count.incrementAndGet();
}

// No setter!
Run Code Online (Sandbox Code Playgroud)

也可以看看: