Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hazelcast IMap是否只能用于锁定?_Java_Synchronization_Locking_Hazelcast - Fatal编程技术网

Java hazelcast IMap是否只能用于锁定?

Java hazelcast IMap是否只能用于锁定?,java,synchronization,locking,hazelcast,Java,Synchronization,Locking,Hazelcast,目前据我所知,在使用IMap#tryLock之后,您不需要使用任何销毁方法,这与ILock不同 将从HazelcastInstance检索到的所有ILock更改为IMaps并使用类似于下面所示的代码是好还是坏的做法 public final T execute(){ try{ imapForLocking.tryLock(nonexistentInMapStringKey); return executeCodeUnrelatedToMap();

目前据我所知,在使用IMap#tryLock之后,您不需要使用任何销毁方法,这与ILock不同

将从HazelcastInstance检索到的所有ILock更改为IMaps并使用类似于下面所示的代码是好还是坏的做法

public final T execute(){
    try{
        imapForLocking.tryLock(nonexistentInMapStringKey);
        return executeCodeUnrelatedToMap();
    }finally{
        imapForLocking.unlock(nonexistentInMapStringKey);
    }
}

为什么你认为你不需要任何破坏方法

可能您应该始终保持lock/try/finally/unlock模式,因为锁最终可能需要超时才能释放

iMap.lock("foo");
try {
    // do something else
} finally {
    iMap.unlock("foo");
}
但实际上,如果您觉得需要锁定映射以进行某些更改,您可能希望使用EntryProcessor,它将在密钥所有者上运行,并为您提供隐式锁,因此您实际上不需要真正的锁定,但具有相同的行为。 锁定本身总是一个代价高昂且不可取的操作。

在这里找到了我的答案

hazelcast开发人员鼓励使用IMap而不是ILock进行锁定

是的,您必须调用destroy,因为所有ILock对象都保存在内存中。 您还可以为锁使用分布式映射:

IMap mapLocks=hazelcastInstance.getMap(“mylocks”); 地图锁。锁(钥匙)

当你调用mapLocks.unlock(钥匙)时,你的锁是 自动收集垃圾。这更简单、更快、更干净


对于IMap,不需要使用destroy方法,因为如果不使用密钥,则在配置的时间之后会对密钥进行垃圾收集。我的主要愿望是避免管理内存。锁定与销毁方法和GC有什么关系?锁定类似于数据库中的行锁定。