Блокировка объекта в Java с некоторыми значениями атрибутов - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть один объект

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

}

здесь я использовал синхронизированный, поэтому всякий раз, когда какой-то внешний поток будет вызывать, они будут ждать, если метод используется1 поток

Теперь мне нужно изменить его, чтобы иметь некоторые условия.Тот же самый метод должен использоваться для синхронизации и асинхронности на основе некоторого условия

, если объект с source = ABC и entityId = 123 уже обрабатывает, и приходящий поток имеет Object с source = ABC и entityId = 333, тогда это должно позволитьбез ожидания.Если тот же объект с source = ABC и entityId = 123 поступает из diff thread, то он должен перейти в состояние Ожидание, пока первый не завершит процесс.

Поэтому мне нужно, чтобы тот же метод должен был синхронизироваться только тогда, когда онвстретить некоторые условия.

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

ПРИМЕЧАНИЕ. Здесь значение может быть разным, поэтому нам необходимо реализовать такую ​​логику

1 Ответ

0 голосов
/ 13 февраля 2019

Я думаю, вам нужно поставить блокировку на сам объект здесь

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

Не создавайте новый объект, когда значения будут такими же в следующий раз, создавайте новый объект только тогда, когда значения будут другими, ядумаю, что это послужит вашей цели, потому что для каждого объекта существует один замок.Поэтому в следующий раз, когда значения будут одинаковыми и один и тот же объект будет передан, он будет ожидать освобождения существующей блокировки. И во втором случае, когда объект будет другим, он будет выполняться без ожидания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...