java 互斥量_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不是线程安全的,因此在多个线程同时从哈希映射中添加/删除值时,可能会出现问题。

所以我的问题是,如果我使HashMapa

ConcurrentHashMap是线程安全的,则同步块会阻止其他线程访问locks.get(name)吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值