OSDir


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [ALL] Where should an OrderedObservable live in Commons?



Am 10.07.2018 um 19:13 schrieb Gary Gregory:
> Yeah, I dislike *Util names as well, it's not only a co-out but an
> encouragement to make such classes dumping-grounds/kitchen-sinks.
> 
> I was thinking [lang] or maybe [collections] but it's not a collection
> really.

As the implementation is thread-safe, I think it may belong in a similar
category as the circuit breaker classes and other concurrency utils we
have currently in [lang].

Oliver

> 
> Gary
> 
> On Tue, Jul 10, 2018 at 10:14 AM Rob Tompkins <chtompki@xxxxxxxxx> wrote:
> 
>> Wouldn’t this be an argument for commons-util (specifically for extensions
>> of java.util)? Now, I whole heartedly disagree with naming things
>> “XxxxUtils” because I feel like the whole idea of naming a piece of a
>> machine a utility is a cop out and bad practice in semantics, so maybe this
>> goes with [pool] or [lang]??
>>
>>> On Jul 10, 2018, at 11:51 AM, Gary Gregory <garydgregory@xxxxxxxxx>
>> wrote:
>>>
>>> Does anyone have any thoughts on where an OrderedObservable should live
>> in
>>> Commons if at all?
>>>
>>> import java.util.ArrayList;
>>> import java.util.List;
>>> import java.util.concurrent.locks.Lock;
>>> import java.util.concurrent.locks.ReadWriteLock;
>>> import java.util.concurrent.locks.ReentrantReadWriteLock;
>>> import java.util.function.Consumer;
>>>
>>> public class OrderedObservable<L> {
>>>
>>>    private final ReadWriteLock readWriteLock = new
>>> ReentrantReadWriteLock(true);
>>>    protected final Lock readLock = readWriteLock.readLock();
>>>    protected final Lock writeLock = readWriteLock.writeLock();
>>>    private final List<L> listeners = new ArrayList<>();
>>>
>>>    public void clearListeners() {
>>>        listeners.clear();
>>>    }
>>>
>>>    public void notifyListeners(final Consumer<? super L> algorithm) {
>>>        this.readLock.lock();
>>>        try {
>>>            this.listeners.forEach(algorithm);
>>>        } finally {
>>>            this.readLock.unlock();
>>>        }
>>>    }
>>>
>>>    public L register(final L listener) {
>>>        this.writeLock.lock();
>>>        try {
>>>            this.listeners.add(listener);
>>>        } finally {
>>>            this.writeLock.unlock();
>>>        }
>>>        return listener;
>>>    }
>>>
>>>    public void unregister(final L listener) {
>>>        this.writeLock.lock();
>>>        try {
>>>            this.listeners.remove(listener);
>>>        } finally {
>>>            this.writeLock.unlock();
>>>        }
>>>    }
>>>
>>> }
>>>
>>> Thank you,
>>> Gary
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@xxxxxxxxxxxxxxxxxx
>> For additional commands, e-mail: dev-help@xxxxxxxxxxxxxxxxxx
>>
>>
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@xxxxxxxxxxxxxxxxxx
For additional commands, e-mail: dev-help@xxxxxxxxxxxxxxxxxx