Java hazelcast IMap是否只能用于锁定?
目前据我所知,在使用IMap#tryLock之后,您不需要使用任何销毁方法,这与ILock不同 将从HazelcastInstance检索到的所有ILock更改为IMaps并使用类似于下面所示的代码是好还是坏的做法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();
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有什么关系?锁定类似于数据库中的行锁定。