Java根据参数进行同步(名为互斥锁)
我正在寻找一种基于接收到的参数来同步方法的方法,如下所示:
public synchronized void doSomething(name){//some code
}
我希望doSomething
基于这样的name
参数来同步方法:
线程1:doSomething(“ a”);
线程2:doSomething(“ b”);
线程3:doSomething(“ c”);
线程4:doSomething(“ a”);
线程1,线程2和线程3将在不同步的情况下执行代码,但是线程4将等待直到线程1完成代码,因为它具有相同的“ a”值。
谢谢
根据Tudor的解释,我认为我面临另一个问题:这是新代码的示例:
private HashMap locks=new HashMap();public void doSomething(String name){
locks.put(name,new Object());
synchronized(locks.get(name)) {
// ...
}
locks.remove(name);
}
我之所以不填充锁映射,是因为name可以具有任何值。
基于上面的示例,由于HashMap不是线程安全的,因此在多个线程同时从哈希映射中添加/删除值时,可能会出现问题。
所以我的问题是,如果我使HashMap
a
ConcurrentHashMap
是线程安全的,则同步块会阻止其他线程访问locks.get(name)吗?
回答:
使用映射将字符串与锁定对象相关联:
Map<String, Object> locks = new HashMap<String, Object>();locks.put("a", new Object());
locks.put("b", new Object());
// etc.
然后:
public void doSomething(String name){ synchronized(locks.get(name)) {
// ...
}
}
以上是 Java根据参数进行同步(名为互斥锁) 的全部内容, 来源链接: utcz.com/qa/426422.html