自我到期的对象 - 任何更好的选择

Sud*_*kar 3 java

请在下面找到我创建并打算用作自定义对象的类.

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)

任何人都可以建议的更好的选择吗?

想在规则引擎中使用它来处理事件.其中一个场景是收到事件时,将它们放入会话中(使用具有自失效属性的对象).我希望他们只根据规则中设置的有效性进入会话.一旦它们到期,它们将被从会话中删除.

art*_*tol 7

只是懒洋洋地计算到期时间:

private long expiryDate; // set in constructor

public boolean isExpired() {
    return System.currentTimeMillis() >= expiryDate;
}
Run Code Online (Sandbox Code Playgroud)

无需生成线程.


Pet*_*rey 5

每个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过期时更新.