use*_*118 2 java multithreading
我在接受采访时被问到以下问题.
有一个对象由多个线程共享.该对象具有以下功能.如何确保不同的线程可以同时为参数x的不同值执行这些功能?如果两个线程正在以相同的x值执行,则应阻止其中一个.
public void func(String x){
-----
}
Run Code Online (Sandbox Code Playgroud)
"synchronized"关键字在这种情况下不起作用,因为它将确保一次只能执行一个线程.请告诉我这将是什么解决方案
想到的第一件事就是
public void func(String x){
synchronized (x.intern()) {
// Body here
}
}
Run Code Online (Sandbox Code Playgroud)
这将表现得如上所述; 当然,这感觉就像一个讨厌的黑客,因为被同步的对象是公共可访问的,而其他代码可能会因此而干扰锁定.