我在想一个自我重置的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;
}
答案 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;
}