2017-05-01 3 views
2

シングルトン(またはMultiton)柄の経過時間に基づいて

private static ConcurrentHashMap<String, LocatorDAO> instances = new ConcurrentHashMap<String, LocatorDAO>(); 

public static LocatorDAO getInstance(String page String field) 
{ 
    String instanceID = page + " " + field; 
    LocatorDAO result = instances.get(instanceID); 

    if (result == null) 
    { 

     LocatorDAO m = new LocatorDAO(page, field); 
     result = instances.putIfAbsent(instanceID, m); 

     if (result == null) 
      result = m; 
    } 

    return result; 
} 

私はインスタンス化することによって、このデザインを変更したいです300秒ごとに新しいインスタンスが作成されます。つまり、以前のインスタンスをインスタンス化した時点から300秒が経過した場合、インスタンスを再度インスタンス化したい(インスタンスがインスタンス化されなかった場合)。

どうすればいいですか?

+0

注:現在のコードを簡略化するために、computeIfAbsentを使用できます。例えば、以下を参照してください:http://stackoverflow.com/a/18149547/829571 – assylias

+0

あなたの 'HashMap'にどれだけの柔軟性があるのか​​は分かりません。それはあなたのコードの残りの部分と密接に結びついていますか?もしそうなら、あなたは 'getInstance'の中で静的ローカルタイムスタンプを使うように強制されますか? – jiveturkey

答えて

0

解決策: インスタンスが作成されるたびにタイムスタンプを保存します。新しいインスタンスが作成されるたびに、保存されたタイムスタンプをチェックし、時差を見つけます。

  1. instanceIDに作成タイムスタンプを追加し、手動ですべてのキーを検索:あなたはこれを達成することができる少なくとも2つの方法があります :どのように実装する

    。これは単純な解法ですが、ハッシュマップのすべてのキーを検索する必要があるため、処理が遅くなります。

  2. 作成時間を節約するために2つのフィールドLocatorDAOと長いフィールドを持つBeanクラスを実装します。項目はハッシュマップに存在する場合作成時に、それが作成時間だと、それは300秒よりも古い場合、新しいインスタンスを作成します

は(コード例なし)この答えを願ってチェックすることは十分です。

関連する問題