Java:根据参数值选择同步方法



我正在编写一个java应用程序,它向一组无线电发送一些命令。在某些情况下,如果某个命令被发送到无线电,应用程序需要等待答案,然后再向同一个无线电发送类似的命令。然而,同样的命令可以发送到另一个无线电而不会造成麻烦。

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

提前感谢!

我会使用<MAC,>使用初值1。在方法中分别写入acquirerelease

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

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

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

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

简单示例:

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

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

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

最新更新