[concurrency-interest] Durations in existing JDK APIs

Gregg Wonderly gergg at cox.net
Wed May 30 22:43:21 EDT 2018


I am not sure I understand this implementation, but isn’t 

>        long s = convert(duration.getSeconds(), SECONDS);

needing to actually be

>        long s = convert(duration.getSeconds(), NANOSECONDS);

so that s+n is in a common unit of measure?

Gregg

> On May 30, 2018, at 7:19 PM, Martin Buchholz via Concurrency-interest <concurrency-interest at cs.oswego.edu> wrote:
> 
> v.0.2 has both conversion methods in TimeUnit.  The unexpected weirdness is that convert(Duration) saturates while toDuration throws ArithmeticException, but both seem author-culture-consistent.  Perhaps TimeUnit#toDuration doesn't provide enough value in view of the existing Duration.of and TimeUnit#toChronoUnit.  And most of the time you'd expect to convert from Duration to long, just before calling a TimeUnit based method.
> 
>     /**
>      * Converts the given time duration to this unit.
>      *
>      * @param duration the time duration
>      * @return the converted duration in this unit,
>      * or {@code Long.MIN_VALUE} if conversion would negatively overflow,
>      * or {@code Long.MAX_VALUE} if it would positively overflow.
>      * @throws NullPointerException if {@code duration} is null
>      */
>     public long convert(Duration duration) {
>         long s = convert(duration.getSeconds(), SECONDS);
>         if (s == Long.MIN_VALUE) return s;
>         long n = convert(duration.getNano(), NANOSECONDS);
>         assert n >= 0 && n < 1_000_000_000;
>         return (s + n < s) ? Long.MAX_VALUE : s + n;
>     }
> 
>     /**
>      * Converts the given time duration in this unit to a Duration.
>      *
>      * @param duration the time duration
>      * @return the time duration represented as a Duration
>      * @throws ArithmeticException if the duration cannot be represented
>      * as a Duration due to numeric overflow
>      */
>     public Duration toDuration(long duration) {
>         return Duration.of(duration, toChronoUnit());
>     }
> 
> _______________________________________________
> Concurrency-interest mailing list
> Concurrency-interest at cs.oswego.edu
> http://cs.oswego.edu/mailman/listinfo/concurrency-interest



More information about the Concurrency-interest mailing list