Я ищу коллекцию java, которая поддерживает блокировку read()
s на предикате. Я написал простую версию, но похоже, что это уже было придумано?Продюсер-потребитель с предикатом
Например:
interface PredicateConsumerCollection<T> {
public void put(T t);
@Nullable
public T get(Predicate<T> p, long millis) throws InterruptedException;
}
put()
подает свой аргумент к ожидающему потребителю с соответствующим предикатом, или тайниками его в магазине. A get()
немедленно возвращается, если подходящий номер T
уже находится в магазине или блокируется до тех пор, пока не будет выбрано подходящее значение() или не истечет время ожидания. Потребители конкурируют, но справедливость в моем случае не является критичной.
Кто-нибудь знает о такой коллекции?
это работает только, если каждый предикат описывает отчетливый набор 'Result'. Если у вас есть, например, два предиката «x <3» и «x <5», то в результате наборы результатов перекрываются, и вам нужно сохранить «Результат» в двух очередях, если «Result.x = 1». – Ralf
Хорошее предложение и спасибо! Но, к сожалению, в моем случае предикаты не известны заранее. – tariksbl