I’m not all that familiar with that area of academia. Let me see what I can dig 
up

-Rob

> On Jul 7, 2020, at 2:19 PM, Matt Sicker <boa...@gmail.com> wrote:
> 
> Are there any academic references for this? Or even something from
> Java Concurrency in Practice? Those are good sources for names around
> concurrency.
> 
> On Tue, 7 Jul 2020 at 12:42, Rob Tompkins <chtom...@gmail.com> wrote:
>> 
>> Why not make the name “ThreadedLambdaSynchronizer” or something like 
>> that….just something more descriptive here that get’s closer to what the 
>> intended functionality is.
>> 
>> That said, I’m not particularly tied to the name 
>> “ThreadedLambdaSynchronizer” just spitballing here for something more 
>> descriptive than “Lock”
>> 
>> -Rob
>> 
>>> On Jun 29, 2020, at 12:58 PM, Matt Sicker <boa...@gmail.com> wrote:
>>> 
>>> Now that starts to sound like Apache Groovy or Kotlin.
>>> 
>>> On Mon, 29 Jun 2020 at 11:58, Xeno Amess <xenoam...@gmail.com> wrote:
>>>> 
>>>> soemtimes I really wish to rewrite/add some functions in jdk directly...
>>>> especially for reusing some package private static functions...
>>>> 
>>>> Gary Gregory <garydgreg...@gmail.com> 于2020年6月30日周二 上午12:01写道:
>>>> 
>>>>> I'm not sure talking to the JDK folks is helpful IMO. We are still
>>>>> targeting Java 8. The customers I deal with are migrating from 8 to 11, 
>>>>> and
>>>>> Java 11 is not everywhere our customers are. So talking about something
>>>>> that might end up in Java... 25 seems to be not in our user's best or
>>>>> immediate interest. It might be good for Java in the long oh so long term
>>>>> of course.
>>>>> 
>>>>> Gary
>>>>> 
>>>>> On Mon, Jun 29, 2020 at 8:31 AM Rob Tompkins <chtom...@gmail.com> wrote:
>>>>> 
>>>>>> At first look, I’m a little surprised we’re trying to take on this
>>>>>> functionality. Has anyone reached out to the JDK guys to see if they’d be
>>>>>> interested in having it in the JDK? That said, if we approach it from
>>>>> that
>>>>>> path, we would lose the functionality in older versions of java. So
>>>>> maybe I
>>>>>> just talked myself out of the idea of putting it in the JDK....
>>>>>> 
>>>>>> Just wanted to stream of consciousness my initial gut vibe.
>>>>>> 
>>>>>> Cheers,
>>>>>> -Rob
>>>>>> 
>>>>>>> On Jun 26, 2020, at 10:07 AM, Gary Gregory <garydgreg...@gmail.com>
>>>>>> wrote:
>>>>>>> 
>>>>>>> Hi All:
>>>>>>> 
>>>>>>> I know email is a challenging medium for code reviews, so please
>>>>> consider
>>>>>>> these comments coming from my best intentions, constructive and caring
>>>>>> ;-)
>>>>>>> Also please excuse the meandering nature of this post.
>>>>>>> 
>>>>>>> The new class org.apache.commons.lang3.concurrent.Locks.Lock needs
>>>>> better
>>>>>>> names IMO, not just the class name. There is already a JRE interface
>>>>>> called
>>>>>>> Lock so this class name is confusing (to me.)
>>>>>>> 
>>>>>>> The Javadoc reads in part:
>>>>>>> 
>>>>>>>   * This class implements a wrapper for a locked (hidden) object, and
>>>>>>>   * provides the means to access it. The basic idea, is that the user
>>>>>>>   * code forsakes all references to the locked object, using only the
>>>>>>>   * wrapper object, and the accessor methods
>>>>>>> 
>>>>>>> But this is not the case, the object itself is not locked in
>>>>>>> the traditional sense with a monitor through a synchronized block, so
>>>>> we
>>>>>>> need to update the Javadoc as well.
>>>>>>> 
>>>>>>> To me, this is more about executing blocks of code (through lambdas)
>>>>>> which
>>>>>>> then get 'safe' (via locking) access to an underlying object. This
>>>>> tells
>>>>>> me
>>>>>>> the class is more about the functional interfaces than about a domain
>>>>>>> "Object", hence the name "Lock" is not the best. It's really more of a
>>>>>>> visitor where the visitation pattern is: Lock, Visit, Unlock.
>>>>>>> Instead, maybe:
>>>>>>> - StampledLockVisitor (more specific)
>>>>>>> - LockingVisitor (more general)
>>>>>>> - SafeObject (vague)
>>>>>>> - ObjectLocker (vague)
>>>>>>> - rejected: LockedObject since the object itself is not locked.
>>>>>>> - ?
>>>>>>> 
>>>>>>> What is also confusing IMO is that the instance variable for the object
>>>>>> is
>>>>>>> called "lockedObject" but the object is in fact NOT locked all the
>>>>> time.
>>>>>> So
>>>>>>> that needs to be renamed IMO:
>>>>>>> - object (the simplest)
>>>>>>> - subject
>>>>>>> - domain
>>>>>>> - target
>>>>>>> - ?
>>>>>>> 
>>>>>>> In the same vein, the StampedLock is named "lock" which is also
>>>>> confusing
>>>>>>> since StampedLock does not implement Lock.
>>>>>>> 
>>>>>>> Why can't the domain object be null, it's never used by the framework?
>>>>>>> Why this:
>>>>>>>              if (t == lockedObject) {
>>>>>>>                  throw new IllegalStateException("The returned object
>>>>>>> is, in fact, the hidden object.");
>>>>>>>              }
>>>>>>> ?
>>>>>>> This seems like an application specific constraint that has nothing to
>>>>> do
>>>>>>> with the framework.
>>>>>>> 
>>>>>>> Now that I've considered the above, the API Locks.lock(O) is really
>>>>>>> misnamed, because it does not lock anything, it's a factory method.
>>>>>>> 
>>>>>>> Stepping back even more, since there is only a static inner class in
>>>>>> Locks,
>>>>>>> and no-hint that alternative implementations for different kind of
>>>>> locks
>>>>>>> are possible, I would say we do not need Locks, all we need is what is
>>>>>> now
>>>>>>> called Lock.
>>>>>>> 
>>>>>>> It's not clear why some methods are protected, I would make those
>>>>>> private.
>>>>>>> It's not like I can use or plugin a Lock, ReentrantReadWriteLock, a
>>>>>>> ReentrantLock, or any ReadWriteLock instead of a StampedLock. I would
>>>>>> then
>>>>>>> make the current Lock class a standalone class which can then be used
>>>>>> later
>>>>>>> from a factory class (now Locks) where we can then fill in with
>>>>> different
>>>>>>> implementations.
>>>>>>> 
>>>>>>> The Javadoc talks about a "hidden" object but it is not hidden since it
>>>>>> is
>>>>>>> passed to all visitors!
>>>>>>> 
>>>>>>> This test assumption is wrong:
>>>>>>> 
>>>>>>>       If our threads are running concurrently, then we expect to be
>>>>>>> faster
>>>>>>>       than running one after the other.
>>>>>>> 
>>>>>>> The VM or Java spec makes no such guarantee and the tests have no
>>>>> control
>>>>>>> over VM scheduling. There are cases where this will fail when under
>>>>> heavy
>>>>>>> load for example where the cost of additional threads becomes
>>>>>> overwhelming.
>>>>>>> 
>>>>>>> Another item I am quite doubtful about is hiding checked exceptions by
>>>>>>> rethrowning them as unchecked. I'd consider this an anti-pattern. If I
>>>>> am
>>>>>>> using one of our "Failing" interfaces it is because I am expecting it
>>>>> to
>>>>>>> fail. Perhaps this could be made smoother by refactoring to pass in a
>>>>>>> lambda for an exception handler.
>>>>>>> 
>>>>>>> I've crystallized my thoughts into code here as WIP (Javadoc needs
>>>>> work):
>>>>>>> https://github.com/apache/commons-lang/pull/559
>>>>>>> 
>>>>>>> Not as important as the above:
>>>>>>> The example in the Javadoc uses logging as its domain subject, a
>>>>>> "logging"
>>>>>>> API (PrintStream) which is not a good example IMO. Logging frameworks
>>>>>>> today like Log4j handle multi-threaded applications normally without
>>>>>> having
>>>>>>> developers meddle in it. Yes, I understand it's a simple example but I
>>>>> am
>>>>>>> hoping we can come up with something more realistic or useful.
>>>>>>> 
>>>>>>> Thank you,
>>>>>>> Gary
>>>>>> 
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>>>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>>>> 
>>>>>> 
>>>>> 
>>> 
>>> 
>>> 
>>> --
>>> Matt Sicker <boa...@gmail.com>
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> For additional commands, e-mail: dev-h...@commons.apache.org
>> 
> 
> 
> -- 
> Matt Sicker <boa...@gmail.com>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to