複数のスレッドを処理する必要があるクライアントサーバーアプリケーションを作成しています。数秒ごとに生きているパケットを送信するサーバーがいくつかあります。これらのサーバーはConcurrentHashMapで維持されます。このマップには、それぞれのサーバーの最後の生きているパッケージが到着した時刻とペアになっているEndPointが含まれています。
これでスレッドができました。このスレッドは、特定の時間、生きているパケットを送信していないすべてのサーバーを「分類」する必要があります。
そんなことはできないと思いますよね?
for( IPEndPoint server : this.fileservers.keySet() )
{
Long time = this.fileservers.get( server );
//If server's time is updated here, I got a problem
if( time > fileserverTimeout )
this.fileservers.remove( server );
}
ループ全体のロックを取得せずにそれを回避する方法はありますか(他のスレッドでも尊重する必要があります)?