小编Sri*_*thy的帖子

Unit和()Unit有什么区别

我编写了两个helloWorld函数,一个带有括号(),另一个没有。如果我使用带参数的参数(特别是带参数的参数或不带参数的参数)调用它,则效果很好。另一个没有参数定义的消息叫作“ unit does not take parameters”。我很困惑。

scala> def hWorld() = println("Hello World")
hWorld: ()Unit

scala> def hWorld = println("Hello World")
hWorld: Unit

scala> hWorld
Hello World

scala> hWorld()
<console>:10: error: Unit does not take parameters
              hWorld()
                    ^
scala> def hWorld2() = println("Hello World")
hWorld2: ()Unit

scala> hWorld2
Hello World

scala> hWorld2()
Hello World

scala> 
Run Code Online (Sandbox Code Playgroud)

scala

2
推荐指数
1
解决办法
71
查看次数

使用iMap的Hazelcast分布式锁

我们目前正在使用Hazelcast 3.1.5.我有一个简单的分布式锁定机制,可以跨多个JVM节点提供线程安全性.代码非常简单.

 private static HazelcastInstance hInst = getHazelcastInstance();

 private IMap<String, Integer> mapOfLocks = null;
  ...
  ...

   mapOfLocks = hInst.getMap("mapOfLocks");
        if (mapOfLocks.get(name) == null) {
            mapOfLocks.put(name,1);
            mapOfLocks.lock(name);
        }
        else {
            mapOfLocks.put(name,mapOfLocks.get(name)+1);
        }
         ...
         <STUFF HAPPENS HERE>
         mapOfLocks.unlock(name);
         ..
    }
Run Code Online (Sandbox Code Playgroud)

早些时候,我曾经直接调用HazelcastInstance.getLock()并且事情似乎有效,尽管我们从未在涉及多个JVM时看到任何不合适的地方.最近,我被要求在块中调查数据库死锁,经过数周的调查和日志分析,我能够确定这是由多个线程能够获取针对相同密钥的锁定引起的.在第一个线程可以提交代码之前,第二个线程设法获得另一个锁,此时第二个线程被第一个线程的数据库锁阻塞.

是否存在针对Hazelcast实现分布式锁的未解决的错误,我应该对我的配置采取哪些不同的做法?而且,我的配置已禁用多播并启用了tcp-ip

java multithreading distributed locking hazelcast

1
推荐指数
1
解决办法
4006
查看次数

标签 统计

distributed ×1

hazelcast ×1

java ×1

locking ×1

multithreading ×1

scala ×1