如何使用objectId或哈希码对对象进行同步?

时间:2019-05-01 10:23:35

标签: java multithreading synchronization

有人可以解释一下同步如何获取对象的锁吗?

我有一个代码,希望在其中动态获取String值的锁定。

例如

String a = "abc";
synchronization(a){
   //some logic
}

现在我想要的是,如果我从api获得一个请求的abc值,而在另一个请求中我获得了abc的值,同时获得前一个请求的锁定,则新请求应基于值。

有人可以帮忙它/我该如何实现?

1 个答案:

答案 0 :(得分:2)

  

现在我想要的是,如果我从api获得一个请求的abc值,而在另一个请求中我获得了abc的值,同时获得前一个请求的锁定,则新请求应基于值。

要为此使用synchronized,您需要确保"abc"对象是相同的字符串对象,而不仅仅是等效的字符串(出于相同的原因{ {3}}),方法是使用intern

synchronized (a.intern()) {
    // ...
}

synchronized需要相同的对象,而不仅仅是同等的对象。


也就是说,同步字符串对象以防止应用程序的两个部分同时处理等效请求(从外部,没有详细信息)似乎有点奇怪,这尤其是因为它不会扩展到单个JVM实例之外