如何锁定Hazelcast地图时如何防止阅读



因为应该将很多数据放入Hazelcast地图中,我想在数据放入地图上时要防止其他数据。

有什么方法可以实现吗?

例如: map a = map(1,000,000,000) // a has 1,000,000,000 elements map b = map(2,000) // b has 200 emlemnts 我想将所有B放入A;

将所有这些元素放入地图A;

之后应访问B的元素。

如果映射B的元素尚未完全放入地图中,则无法访问MAP B的元素。

用例:

map a ={1,2,3,4,5} 
map b ={a,b,c,d,e}

打印a//结果{1,2,3,4,5}

foreach item in b
a.put item

打印A//结果{1,2,3,4,5}

end foreach

打印a//结果{1,2,3,4,5,a,b,c,d,e}

我想合并这两个地图。虽然,在合并完成之前,无法通过MAP A访问MAP B的元素。

我的解决方案

感谢所有人的帮助。阅读Hazelcast手册后,我选择了解决此问题的TransactionalMap。

transactionalmap被读取_comment Islate。当交易更新地图(1)时,它可能会暂停阅读地图(1)线程。

````java 静态运行tx = new runnable(){ @Override public void run(){

        try {
            logger.info("start transaction...");
            TransactionContext txCxt = hz.newTransactionContext();
            txCxt.beginTransaction();
            TransactionalMap<Object, Object> map = txCxt.getMap("map");
            try {
                logger.info("before put map(1)");
                Thread.sleep(300);
                map.put("1", "1"); // reader1 is blocked
                logger.info("after put map(1)");
                Thread.sleep(500);
                map.put("2", "2"); // reader2 is blocked
                logger.info("after put map(2)");
                Thread.sleep(500);
                txCxt.commitTransaction();
                logger.info("transaction committed");
            } catch (RuntimeException t) {
                txCxt.rollbackTransaction();
                throw t;
            }
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            logger.info("Finished testmap size:{}, testmap(1):{}, testmap(2):{} ", testmap.size(), testmap.get("1"),
                    testmap.get("2"));
            Hazelcast.shutdownAll();
            logger.info("system exit.");
            System.exit(0);
        }
    }
};

````

您的动机/用例是什么?您可以使用交易,但这可能会对性能产生不利影响。另外,您可以使用手动锁定 - 请参阅ILock

但是,这两种技术都应用作最后一个套路 - 当您没有机会以不同的方式设计应用程序时。

实现此目的的一种方法是将片段锁定在地图B中时。一旦将条目映射到A完成,您就可以解锁细分市场。
但是,这种方法将对性能产生影响,因为它需要额外的锁定/解锁步骤。

最新更新