我有一个单例方法:
public void myMethod(String x){
//do lengthy process on x
}
我有三个线程调用 myMethod
:
- Thread A, x="word" --> start at 05.00.01pm, finished at 05.00.10pm
- Thread B, x="sentence" --> start at 05.00.01pm, finished at 05.00.08pm
- Thread C, x="word" --> start at 05.00.02pm, finished at ???
如您所见,线程 C
应该等到线程 A
完成,因为线程 C
也在发送单词
>。但是,即使在线程 A
完成之前,线程 B
也可以执行 myMethod
,因为它发送的是 sentence
而不是 词
。
myMethod
会被频繁调用,并且myMethod
中的参数x
没有规则,所以我不认为保存所有可能的值对于参数x
是可行的
仅供引用:虽然“x”参数的字符串长度不受限制,但字符保证仅为字母数字(a..zA..Z0..9),没有奇怪的重音字符 我该怎么做?
最佳答案
您可以通过在方法中放置一个基于字符串规范表示的同步块(synchronized block)来实现此目的
public void myMethod(String x){
synchronized(x.intern()){
//do lengthy process on x
}
}
关于java - 方法中一次只能有一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34922821/