具有一些属性值的java中的对象锁定

问题描述 投票:0回答:1

我有一个对象

public class MyObject{
 private int id;
 private String source;
 private String entityId;
 private string value;

//setter getter

}

//服务中的方法

public syncronized void processCalc(MyObject o){
 //object processing code

}

这里我使用了synchronized,所以每当有一些外部线程调用时,如果1个线程使用该方法,它们将等待

现在我需要改变它以便有一些条件。基于某些条件,应该使用相同的方法进行同步和异步

如果具有source = ABC和entityId = 123的对象已经处理并且即将到来的线程具有带有source = ABC和entityId = 333的Object,那么它应该允许而不等待。如果source = ABC和entityId = 123的同一对象来自diff线程,那么这应该处于Waiting状态,直到第一个完成该过程。

所以我需要使同样的方法只有在满足某些条件时才应该同步。

1) if Coming Object is same as object already processing, then it should wait
2) If coming object is diff than already processing object then it should allow to proccess at the same time, no need to wait
3) same object I mean entityid and source is same

注意:这里的值可以是diff,因此我们需要实现这种逻辑

java multithreading concurrency
1个回答
0
投票

我认为你需要在这里锁定对象本身

public  void processCalc(MyObject o){
 synchronized(o){
 //object processing code
}
}

下次值相同时不要创建新的Object,只有当值不同时创建新对象,我认为这将满足您的目的,因为每个对象有一个锁。因此,下次当值相同并且相同的对象将被传递时,它将等待现有的锁获得释放。在第二种情况下,当对象不同时,它将继续而不等待。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.