我有以下代码
public CampaignProcessorEntity processCampaign(CampaignProcessorEntity campaignEnity) {
synchronized(campaignEnity.getHash()) {
....
....
}
}
我的同步块里面的代码运行了几分钟,我的要求是,如果第一个线程开始执行块,第二个应该等待,只有两个哈希都相同或者继续没有同步。我对每个线程都有不同的实例。 getHash()方法每次都返回新的String对象。所以我有一个静态映射,它将哈希值存储为键和值,第二个线程在到达时检查哈希映射并检索第一个线程使用的监视器,但它仍然不是等待。
答案 0 :(得分:0)
根据您可以进行同步的结果,您可以先检查哈希值是否相同。
synchronized(Object lock) {
// check for hash values.
}
if(hashValuesAreEqual) {
synchronized(campaignEnity.getHash()) {
// do your sync thing.
}
}
else {
// do your async thing.
}