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

Reply via email to