java多线程中如何实现根据不同字符串或者数字加不同的锁

java多线程中如何实现根据不同字符串或者数字加不同的锁,从而实现在特定参数下才并发访问一段代码?类似synchronized(int a){} 或者 synchronized(String a){}

3个回答

用这个锁ReentrantLock,把不同的关键字放到map中,Map 这样,遇到 关键字了,取出lock,
调用 lock.lock();用完之后lock.unlock();一定要放到finally中解锁,要不出异常一致锁着

bashenmail
bashenmail 其实就是一个生产者多个消费者问题,生产者放入的时候把锁制定好了,消费者直接拿过来用就好了
大约 3 年之前 回复
bashenmail
bashenmail 方法有两种,1是map中提前放好,2是Map用同步map
大约 3 年之前 回复
java_best
忘却来的地方 请问下这个map是不是也会有同步问题?同时2个线程去map里面取锁都没有取到,各自新建了的锁,导致同一个关键字用了2个锁
大约 3 年之前 回复

你有理解他那个参数的意义吗,他那个是用于判断当前线程的,找你的说法做一个if不就行了吗

synchronized(lock) 里面的lock只能是对象,不能是int这样的基础类型,可以把int包装成Integer对象:

 int a=1222;
 Integer n=new Integer(a);
 synchronized(n){
 ......
 }
java_best
忘却来的地方 谢谢提醒,不过目前我知道是不能用int作为参数的,但是想在action里面实现根据参数,提高效率同时又兼顾锁 String str=request.getParameter("param"); synchronized (str){ }
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!