On Wed, Jul 8, 2020, 09:32 Rob Tompkins <chtom...@gmail.com> wrote:

>
>
> > On Jul 7, 2020, at 6:56 PM, Gary Gregory <garydgreg...@gmail.com> wrote:
> >
> > In the PR  https://github.com/apache/commons-lang/pull/559 I am going
> with
> > "LockingVistors".
>
> I like this name because of its brevity yet clarity.
>

Let's go for that then. I'll merge the PR later today after I give it
another review.

Gary

>
> -Rob
>
> >
> > Gary
> >
> > On Tue, Jul 7, 2020 at 2:33 PM Rob Tompkins <chtom...@gmail.com> wrote:
> >
> >> 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
> >>
> >>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>

Reply via email to