Java:基于参数值的方法的选择性同步

时间:2014-03-12 13:58:39

标签: java multithreading synchronization

我正在编写一个Java应用程序,它将一些命令发送到一组无线电。在某些情况下,如果某个命令被发送到无线电,则应用程序需要等待答案才能将相似的命令发送到同一个无线电。但是,可以将相同的命令发送到另一台无线电而不会造成麻烦。

由于每个无线电都由其MAC地址标识,我的目标是根据传递给它的writeRemoteRegister(MAC,value)值同步命令发送方法MAC的执行。有可能吗?

提前致谢!

4 个答案:

答案 0 :(得分:2)

我会使用< MACSemaphores>的地图使用初始值1。 该方法中的写入分别为acquirerelease

这是一个链接,以防你不熟悉它们

http://tutorials.jenkov.com/java-util-concurrent/semaphore.html

答案 1 :(得分:1)

您可以将java.util.concurrent.locks.Lock实施存储在由MAC键入的HashMap中。确保您还同步访问HashMap,否则当您第一次遇到MAC地址时可能会遇到竞争条件。

但是面向对象的解决方案是将方法writeRemoteRegister放在MAC类中并使其成为synchronized

答案 2 :(得分:0)

简单示例:

public void x(String y) {
    if (y == null) { ... Something here }
    else if (y.isEmpty()) { ... something here }
    else if (y.equals("ABC1234)) { 
       synchronized(y) {

       }
    } else {

    }
}

答案 3 :(得分:0)

如果我理解正确,您可以简单地同步MAC值。我假设你得到字符串作为MAC值。所以你可以锁定那个字符串。为了使其更安全,您可以使用String .intern。

synchronized(String.intern(MAC.toString())){
   // do your stuff
}