2017-09-08 3 views
0

は、私は、各スレッドがキーのセットをロックしたいクラスタ化されたプログラムを持っています。 Iが最も簡単な解決策使用hazelcastに理解されるように:Hazelcast IMAPのtryLockバルク複数のキー

private void lock(SortedSet<String> objects) { 
    try { 
     IMap<String, String> lockMap = getLockMap(); 
     for (; ;) { 
      SortedSet<String> lockedObjects = new TreeSet<>(); 
      for (String object : objects) { 
       try { 
        boolean locked = lockMap.tryLock(object, 0, null, maxBlockTime, TimeUnit.MILLISECONDS); 
        if (locked) { 
         lockedObjects.add(object); 
        } else { 
          for (String lockedObject : lockedObjects) { 
           lockMap.unlock(lockedObject); 
          } 
          lockedObjects.clear(); 
          break; 
        } 
       } catch (Exception e) { 
        for (String lockedObject : lockedObjects) { 
         try { 
          lockMap.unlock(lockedObject); 
         } catch(Exception ignored) { 
         } 
        } 
        throw e; 
       } 
      } 

      if (!lockedObjects.isEmpty()) { 
        return lockedObjects; 
      } 

      Thread.sleep(waitTime); 
     } 
    } 
} 

このコードは、ネットワークトラフィックとhazelcastする要求の多くを生成することは、このコードの主な問題。誰かがこのコードを最適化する方法をお勧めしてもらえますか?

私はHazelcast IMAPでのバルクのtryLock機能を見つけることができませんでした。

答えて

0

HazelcastはbulkLock方法を提供していません。

あなたはさまざまな方法でこのコードを最適化することができますが、我々はそれに到達する前に、あなたがこれらのエントリと何を達成しようとしているをロックしたい理由を知るために素晴らしいことです。