後セットから削除するには:私はトークンのセットを持ってどのように有効期限
Token is [id, expirationtime]
各トークンは、クライアントによって設定された異なるexpirationtimeを持って
private Set<Token> tokenSeen;
。
有効期限が切れたとき、tokenSeenセットからトークンを削除したいと思います。
後セットから削除するには:私はトークンのセットを持ってどのように有効期限
Token is [id, expirationtime]
各トークンは、クライアントによって設定された異なるexpirationtimeを持って
private Set<Token> tokenSeen;
。
有効期限が切れたとき、tokenSeenセットからトークンを削除したいと思います。
有効期限によって注文された注文セットを使用したい場合があります。その後、最初の要素を定期的にチェックし、満了するとそれを削除します。その後、新しい最初の要素を再度チェックし、期限切れの場合は削除します。 (現在の)最初の要素が期限切れになるまで(そして期限切れ時間によるソートのために、他の要素もすべて期限切れにならないように)繰り返されます。
Quartzのようなスケジューラやタイマーを使用することをお勧めします。
イテレータを使用して、セット内のすべての要素を反復処理し、古い有効期限のある要素を削除します。削除したトークンへの参照がない場合、Java Garbage Collectorは実行時にメモリからそれらを消去します。
Date now = new Date();
Set<Token> tokenSeen = new HashSet<Token>();
Iterator<Token> iterator = tokenSeen.iterator();
while (iterator.hasNext()) {
Token token = iterator.next();
if(token.expirationtime.before(now))
iterator.remove();
}
私は上記のような解決策を考えていました。しかし、私は本当にスケジューラを使うことを望んでいました。 – user1180969
あなたはどこからでもこのコードをトリガすることができます。これはセットをトラバースし、それぞれのアイテムを 'Javaコードで削除する 'コードです。 – melihcelik
あなたは要素の期限が切れているのを追跡するためにDelayQueue
を設定し、それらを削除することができるかもしれません。
ありがとうございます。私はスケジューラを使いたいです。だから私はいくつかの読書を行い、それを実装しようとします。 – user1180969
@ user1180969アプリケーションがJBoss、Glassfishなどのアプリケーションサーバー上で動作している場合、おそらくすでにスケジューラ(QuartzはJBoss用)にアクセスしている可能性があります。 – Thomas