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