首页 > 解决方案 > 同步如何使用 objectId 或 hashcode 在对象上工作?

问题描述

有人可以解释同步如何获得对象的锁定吗?

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

例如

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

现在我想要的是,如果从一个 api 我从一个请求接收 abc 的值,而在另一个请求中我在获得前一个请求的锁定时收到 a 作为 abc 的值,则新请求应该基于值等待。

有人可以帮助它如何工作/我该如何实现这一目标?

标签: javamultithreadingsynchronization

解决方案


现在我想要的是,如果从一个 api 我从一个请求接收 abc 的值,而在另一个请求上我收到 a 作为 abc 的值,同时获得前一个请求的锁定,新请求应该基于值等待。

为此,synchronized需要使用. "abc"_ _==intern

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

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


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


推荐阅读