In the PR  https://github.com/apache/commons-lang/pull/559 I am going with
"LockingVistors".

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
>
>

Reply via email to