多线程 - 共享数据

use*_*118 2 java multithreading

我在接受采访时被问到以下问题.

有一个对象由多个线程共享.该对象具有以下功能.如何确保不同的线程可以同时为参数x的不同值执行这些功能?如果两个线程正在以相同的x值执行,则应阻止其中一个.

public void func(String x){
-----
}  
Run Code Online (Sandbox Code Playgroud)

"synchronized"关键字在这种情况下不起作用,因为它将确保一次只能执行一个线程.请告诉我这将是什么解决方案

Ern*_*ill 6

想到的第一件事就是

public void func(String x){
    synchronized (x.intern()) {
        // Body here
    }
}  
Run Code Online (Sandbox Code Playgroud)

这将表现得如上所述; 当然,这感觉就像一个讨厌的黑客,因为被同步的对象是公共可访问的,而其他代码可能会因此而干扰锁定.