有人可以解释一下同步如何获取对象的锁吗?
我有一个代码,希望在其中动态获取String值的锁定。
例如
String a = "abc";
synchronization(a){
//some logic
}
现在我想要的是,如果我从api获得一个请求的abc值,而在另一个请求中我获得了abc的值,同时获得前一个请求的锁定,则新请求应基于值。
有人可以帮忙它/我该如何实现?
答案 0 :(得分:2)
现在我想要的是,如果我从api获得一个请求的abc值,而在另一个请求中我获得了abc的值,同时获得前一个请求的锁定,则新请求应基于值。
要为此使用synchronized
,您需要确保"abc"
对象是相同的字符串对象,而不仅仅是等效的字符串(出于相同的原因{ {3}}),方法是使用intern
。
synchronized (a.intern()) {
// ...
}
synchronized
需要相同的对象,而不仅仅是同等的对象。
也就是说,同步字符串对象以防止应用程序的两个部分同时处理等效请求(从外部,没有详细信息)似乎有点奇怪,这尤其是因为它不会扩展到单个JVM实例之外