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”值.

谢谢

UPDATE

基于都铎的解释,我认为我面临另一个问题:

以下是新代码的示例:

private HashMap locks=new HashMap();

public void doSomething(String name){

locks.put(name,new Object());

synchronized(locks.get(name)) {

// ...

}

locks.remove(name);

}

我不填充锁图的原因是因为名称可以有任何价值.

基于上述示例,由于HashMap不是线程安全的,所以在同时从多个线程添加/删除hashmap中的值时,可能会出现该问题.

所以我的问题是如果我使HashMap是一个ConcurrentHashMap,它是线程安全的,同步块将阻止其他线程访问locks.get(name)?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值