Java-同步块的动态锁监视器

时间:2018-05-14 09:46:50

标签: java multithreading

我有以下代码

public CampaignProcessorEntity processCampaign(CampaignProcessorEntity campaignEnity) {
 synchronized(campaignEnity.getHash()) {
        ....
        ....
 }
}

我的同步块里面的代码运行了几分钟,我的要求是,如果第一个线程开始执行块,第二个应该等待,只有两个哈希都相同或者继续没有同步。我对每个线程都有不同的实例。 getHash()方法每次都返回新的String对象。所以我有一个静态映射,它将哈希值存储为键和值,第二个线程在到达时检查哈希映射并检索第一个线程使用的监视器,但它仍然不是等待。

1 个答案:

答案 0 :(得分:0)

根据您可以进行同步的结果,您可以先检查哈希值是否相同。

 synchronized(Object lock) {
        // check for hash values.
 }

if(hashValuesAreEqual) {

    synchronized(campaignEnity.getHash()) {
        // do your sync thing.
    }

}
else {
       // do your async thing.
}