代码设计:自复位布尔值。对此的理由?

时间:2014-04-28 17:21:53

标签: java

我在想一个自我重置的get方法。我的构造实际上也有效。但我不确定我是否应该避免这种情况。 这个想法是在第一次“真实”返回之后,值会自动重置。在这种情况下,get值是一个布尔值,告诉我是否收到了答案。一旦我得到一个真实的,该成员应该重新设置为假。否则我必须手动完成。 以下是我这个想法的工作方法。如果值为true,我启动一个等待200ms的新小线程并将该成员重置为false。同时,旧值已经返回。 我的问题是,可以/我应该这样使用它还是有一些主要原因反对它?因为某种程度上,我有种感觉,这种方式不值得推荐。

感谢您提供任何意见。

public boolean isAck() {
    if (acknowledged){
    Thread th = new Thread() {
        public synchronized void run() {
            try {
                Thread.sleep(200);
                acknowledged = false;
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };
    th.start();}
    return acknowledged;
}

2 个答案:

答案 0 :(得分:3)

根据您的评论,我会做这样的事情 -

public boolean isAck() {
  if (acknowledged) {
    setAck(false);
    return true;
  }
  return false;
}

如果你不喜欢这种方式;你可能更喜欢

public boolean isAck() {
  try {
    return acknowledged;
  } finally {
    setAck(false);
  }
}

答案 1 :(得分:1)

这个怎么样:

public boolean isAck() {
   synchronized(this) {
      boolean result = false;
      if (acknowledged){
         result = true;
         acknowledged = false;
      }
    }
    return result;
}