请在下面找到我创建并打算用作自定义对象的类.
public class SelfExpiringObject {
private boolean expired;
// other properties
public void setValidity(final int seconds) {
new Timer().schedule(new TimerTask() {
public void run() {
expired = true;
}
}, TimeUnit.SECONDS.toMillis(seconds));
}
public boolean isExpired() {
return expired;
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议的更好的选择吗?
想在规则引擎中使用它来处理事件.其中一个场景是收到事件时,将它们放入会话中(使用具有自失效属性的对象).我希望他们只根据规则中设置的有效性进入会话.一旦它们到期,它们将被从会话中删除.
只是懒洋洋地计算到期时间:
private long expiryDate; // set in constructor
public boolean isExpired() {
return System.currentTimeMillis() >= expiryDate;
}
Run Code Online (Sandbox Code Playgroud)
无需生成线程.
每个Timer都会创建一个线程,这是一个非常昂贵的对象.我建议你只需要在对象中有到期时间,并有一个线程定期删除过期的对象.
public class ExpiringObject {
private long expiresMS;
// other properties
public void setValidity(final int seconds) {
expiresMS = System.currentTimeMillis() + seconds * 1000;
}
public boolean isExpired() {
return System.currentTimeMillis() >= expireMS;
}
}
Run Code Online (Sandbox Code Playgroud)
监视这些项目的线程可以在Drools过期时更新.
| 归档时间: |
|
| 查看次数: |
4160 次 |
| 最近记录: |