【问题标题】:Hazelcast IMap tryLock bulk multiple keysHazelcast IMap tryLock 批量多键
【发布时间】:2017-09-08 14:36:36
【问题描述】:

我有一个集群程序,其中每个线程都想锁定一组键。 据我了解,使用 hazelcast 的最简单解决方案:

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 功能。

【问题讨论】:

    标签: hazelcast hazelcast-imap distributed-lock


    【解决方案1】:

    Hazelcast 不提供bulkLock 方法。

    您可以通过各种方式优化此代码,但在我们开始之前,最好知道您为什么要锁定这些条目以及您想要实现的目标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      相关资源
      最近更新 更多