我正在编写一个Java应用程序,它将一些命令发送到一组无线电。在某些情况下,如果某个命令被发送到无线电,则应用程序需要等待答案才能将相似的命令发送到同一个无线电。但是,可以将相同的命令发送到另一台无线电而不会造成麻烦。
由于每个无线电都由其MAC地址标识,我的目标是根据传递给它的writeRemoteRegister(MAC,value)
值同步命令发送方法MAC
的执行。有可能吗?
提前致谢!
答案 0 :(得分:2)
我会使用< MAC
,Semaphores
>的地图使用初始值1。
该方法中的写入分别为acquire
和release
。
这是一个链接,以防你不熟悉它们
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
}