Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #33678

Re: Java Checked Exception is BAD!

From Eric Sosman <esosman@comcast-dot-net.invalid>
Newsgroups comp.lang.java.programmer
Subject Re: Java Checked Exception is BAD!
Date 2016-02-08 09:22 -0500
Organization A noiseless patient Spider
Message-ID <n9a859$l55$1@dont-email.me> (permalink)
References (5 earlier) <2b736fcd-b72c-49b5-b4b8-9657ecebd51e@googlegroups.com> <n94sri$run$1@dont-email.me> <n94v2i$2b3$1@dont-email.me> <n950m6$ad9$1@dont-email.me> <fc7c1eb5-903b-4774-ab49-a11d214575c7@googlegroups.com>

Show all headers | View raw


On 2/7/2016 5:14 PM, boxzou@gmail.com wrote:
> On Saturday, 6 February 2016 09:44:12 UTC-5, Eric Sosman  wrote:
>> [...]
>>       There are, of course, places where the entire exception mechanism --
>> checked or not -- becomes awkward.  Somebody's already mentioned how
>> poorly stream operations interact with exceptions; [...]
>> --
>> esosman@comcast-dot-net.invalid
>> "Don't be afraid of work. Make work afraid of you." -- TLM

     Aside: It's considered poor form to quote Usenet signatures.

> good you see problem with checked exception with pipelines.  [...]

     The unfortunate interaction between exceptions and pipelines remains
whether the exceptions are checked or unchecked.  The difficulty lies in
their asynchronicity, not in their checkedness.

     When an exception is thrown from some stage in a pipeline, Java
tries to stop the whole pipeline and deliver the exception to the
invoker.  But in a parallel pipeline Java can't guarantee that all the
branches will stop at the exact same moment, and further exceptions may
be thrown from still-executing branches.  But there's only one catch
clause for all of them (in the invoker or in one of its ancestors), and
that catch clause can handle only one exception per `try'!  So, what
happens to the others?  They just vanish.

     Below is a little class I wrote to illustrate the problem.  Its
exact behavior depends on what random numbers appear and what the
timing of different events is like, but on my machine one run produced

	(lots of lines of normal output)
	java.lang.RuntimeException: java.lang.RuntimeException: 90
	Threw 4 exceptions, caught 1

On this run, three exceptions -- three UNchecked exceptions -- simply
disappeared into the ether.  Throwables of ANY kind play poorly with
parallel pipelines; you cannot blame the problem on checked exceptions.

     The code:

import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.IntStream;

public class Foo {

    private static final AtomicInteger THROWN = new AtomicInteger(0);
    private static final AtomicInteger CAUGHT = new AtomicInteger(0);

    public static void main(String[] unused) {
       IntStream stream = IntStream.range(1, 100).parallel();
       System.out.println(stream);
       System.out.println(stream.isParallel() ? "parallel" : "sequential");
       try {
          stream.mapToObj((i) -> new Foo(i)).forEach((f) -> f.doit());
       } catch (Throwable ex) {
          CAUGHT.incrementAndGet();
          System.err.println(ex);
       }

       System.err.printf("Threw %s exceptions, caught %s%n", THROWN, 
CAUGHT);
    }

    private final int value;

    private Foo(int value) {
       this.value = value;
    }

    private void doit() {
       int delay = ThreadLocalRandom.current().nextInt(100, 1000);
       try {
          Thread.sleep(delay);
       } catch (InterruptedException ex) {
           // Don't care.
       }
       System.err.println(value + " " + Thread.currentThread());
       if (ThreadLocalRandom.current().nextInt(10) == 0) {
          THROWN.incrementAndGet();
          throw new RuntimeException(Integer.toString(value));
       }
    }
}

-- 
esosman@comcast-dot-net.invalid
"Don't be afraid of work. Make work afraid of you." -- TLM

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-04 07:18 -0800
  Re: Java Checked Exception is BAD! Eric Douglas <e.d.programmer@gmail.com> - 2016-02-04 08:15 -0800
    Re: Java Checked Exception is BAD! Silvio <silvio@internet.com> - 2016-02-04 17:57 +0100
      Re: Java Checked Exception is BAD! Eric Douglas <e.d.programmer@gmail.com> - 2016-02-04 10:09 -0800
        Re: Java Checked Exception is BAD! Silvio <silvio@internet.com> - 2016-02-04 21:01 +0100
          Re: Java Checked Exception is BAD! Eric Douglas <e.d.programmer@gmail.com> - 2016-02-04 12:14 -0800
          Re: Java Checked Exception is BAD! Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-02-04 15:16 -0500
            Re: Java Checked Exception is BAD! Silvio <silvio@internet.com> - 2016-02-04 21:37 +0100
              Re: Java Checked Exception is BAD! Eric Douglas <e.d.programmer@gmail.com> - 2016-02-04 13:08 -0800
                Re: Java Checked Exception is BAD! 4ndre4 <4ndre4@4ndre4.com.invalid> - 2016-02-04 21:16 +0000
                Re: Java Checked Exception is BAD! Eric Douglas <e.d.programmer@gmail.com> - 2016-02-04 13:28 -0800
                Re: Java Checked Exception is BAD! Martin Gregorie <martin@address-in-sig.invalid> - 2016-02-04 23:11 +0000
                Re: Java Checked Exception is BAD! a.laforgia@gmail.com - 2016-02-05 04:21 -0800
                Re: Java Checked Exception is BAD! Martin Gregorie <martin@address-in-sig.invalid> - 2016-02-05 13:07 +0000
              Re: Java Checked Exception is BAD! Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-02-04 18:04 -0500
                Re: Java Checked Exception is BAD! Gene Wirchenko <genew@telus.net> - 2016-02-05 11:40 -0800
          Re: Java Checked Exception is BAD! Sebastian <news@seyweiler.dyndns.org> - 2016-02-04 23:22 +0100
          Re: Java Checked Exception is BAD! ruben <ceo@iran.gov> - 2016-02-15 11:45 +0000
      Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-04 11:57 -0800
        Re: Java Checked Exception is BAD! Silvio <silvio@internet.com> - 2016-02-04 21:07 +0100
    Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-04 11:10 -0800
      Re: Java Checked Exception is BAD! Eric Douglas <e.d.programmer@gmail.com> - 2016-02-04 11:28 -0800
        Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-04 11:33 -0800
          Re: Java Checked Exception is BAD! 4ndre4 <4ndre4@4ndre4.com.invalid> - 2016-02-04 21:08 +0000
          Re: Java Checked Exception is BAD! Lew <lewbloch@gmail.com> - 2016-02-04 16:09 -0800
  Re: Java Checked Exception is BAD! Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-02-04 12:00 -0500
  Re: Java Checked Exception is BAD! Marcel Mueller <news.5.maazl@spamgourmet.org> - 2016-02-04 19:28 +0100
    Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-04 11:15 -0800
      Re: Java Checked Exception is BAD! Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-02-04 14:51 -0500
  Re: Java Checked Exception is BAD! 4ndre4 <4ndre4@4ndre4.com.invalid> - 2016-02-04 21:07 +0000
    Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-04 14:36 -0800
      Re: Java Checked Exception is BAD! a.laforgia@gmail.com - 2016-02-05 05:28 -0800
  Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-04 15:31 -0800
    Re: Java Checked Exception is BAD! Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-02-05 08:20 -0500
      Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-05 08:25 -0800
        Re: Java Checked Exception is BAD! Eric Douglas <e.d.programmer@gmail.com> - 2016-02-05 08:47 -0800
          Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-05 16:09 -0800
            Re: Java Checked Exception is BAD! Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-02-06 08:38 -0500
              Re: Java Checked Exception is BAD! Martin Gregorie <martin@address-in-sig.invalid> - 2016-02-06 14:13 +0000
                Re: Java Checked Exception is BAD! Silvio <silvio@internet.com> - 2016-02-06 15:23 +0100
                Re: Java Checked Exception is BAD! Sebastian <news@seyweiler.dyndns.org> - 2016-02-07 14:49 +0100
                Re: Java Checked Exceptions Robert Klemme <shortcutter@googlemail.com> - 2016-02-07 21:55 +0100
                Re: Java Checked Exceptions boxzou@gmail.com - 2016-02-07 14:39 -0800
                Re: Java Checked Exceptions Robert Klemme <shortcutter@googlemail.com> - 2016-02-08 13:30 +0100
                Re: Java Checked Exceptions boxzou@gmail.com - 2016-02-08 06:14 -0800
                Re: Java Checked Exceptions Robert Klemme <shortcutter@googlemail.com> - 2016-02-08 20:55 +0100
                Re: Java Checked Exceptions Lew <lewbloch@gmail.com> - 2016-02-08 16:06 -0800
                Re: Java Checked Exceptions boxzou@gmail.com - 2016-02-08 18:38 -0800
                Re: Java Checked Exceptions Martin Gregorie <martin@address-in-sig.invalid> - 2016-02-09 12:15 +0000
                Re: Java Checked Exceptions boxzou@gmail.com - 2016-02-09 04:59 -0800
                Re: Java Checked Exceptions Lew <lewbloch@gmail.com> - 2016-02-10 12:13 -0800
                Re: Java Checked Exceptions boxzou@gmail.com - 2016-02-10 19:00 -0800
                Re: Java Checked Exceptions Martin Gregorie <martin@address-in-sig.invalid> - 2016-02-11 12:18 +0000
                Re: Java Checked Exceptions leif.roar@dimnakorr.com - 2016-02-11 04:43 -0600
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-07 14:34 -0800
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-07 14:11 -0800
                Re: Java Checked Exception is BAD! Martin Gregorie <martin@address-in-sig.invalid> - 2016-02-07 23:19 +0000
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-07 15:42 -0800
                Re: Java Checked Exception is BAD! Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-02-06 09:43 -0500
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-07 14:14 -0800
                Re: Java Checked Exception is BAD! Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-02-08 09:22 -0500
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-08 11:01 -0800
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-08 11:08 -0800
                Re: Java Checked Exception is BAD! Sebastian <news@seyweiler.dyndns.org> - 2016-02-08 22:02 +0100
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-07 14:09 -0800
                Re: Java Checked Exception is BAD! Martin Gregorie <martin@address-in-sig.invalid> - 2016-02-07 23:29 +0000
                Re: Java Checked Exception is BAD! Sebastian <news@seyweiler.dyndns.org> - 2016-02-08 21:49 +0100
                Re: Java Checked Exception is BAD! Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-02-08 17:23 -0500
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-08 18:46 -0800
                Re: Java Checked Exception is BAD! Sebastian <news@seyweiler.dyndns.org> - 2016-02-09 08:21 +0100
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-09 04:58 -0800
                Re: Java Checked Exception is BAD! Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-02-09 08:17 -0500
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-09 07:57 -0800
                Re: Java Checked Exception is BAD! Sebastian <news@seyweiler.dyndns.org> - 2016-02-10 02:37 +0100
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-10 18:58 -0800
                Re: Java Checked Exception is BAD! Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-02-11 08:13 -0500
                Re: Java Checked Exception is BAD! Lew <lewbloch@gmail.com> - 2016-02-11 14:02 -0800
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-11 16:41 -0800
                Re: Java Checked Exception is BAD! Sebastian <news@seyweiler.dyndns.org> - 2016-02-10 02:31 +0100
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-10 18:47 -0800
                Re: Java Checked Exception is BAD! Martin Gregorie <martin@address-in-sig.invalid> - 2016-02-09 12:26 +0000
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-09 04:57 -0800
                Re: Java Checked Exception is BAD! Martin Gregorie <martin@address-in-sig.invalid> - 2016-02-09 18:27 +0000
              Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-07 20:19 -0800
            Re: Java Checked Exception is BAD! Robert Klemme <shortcutter@googlemail.com> - 2016-02-06 16:01 +0100
              Re: Java Checked Exception is BAD! 4ndre4 <4ndre4@4ndre4.com.invalid> - 2016-02-06 15:10 +0000
                Re: Java Checked Exception is BAD! Kevin McMurtrie <mcmurtrie@pixelmemory.us> - 2016-02-06 17:59 -0800
                Re: Java Checked Exception is BAD! 4ndre4 <4ndre4@4ndre4.com.invalid> - 2016-02-07 09:34 +0000
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-07 14:23 -0800
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-07 20:52 -0800
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-07 21:13 -0800
              Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-07 14:19 -0800
                Re: Java Checked Exception is BAD! Martin Gregorie <martin@address-in-sig.invalid> - 2016-02-07 23:42 +0000
                Re: Java Checked Exception is BAD! Robert Klemme <shortcutter@googlemail.com> - 2016-02-08 13:17 +0100
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-08 04:39 -0800
                Re: Java Checked Exception is BAD! Lew <lewbloch@gmail.com> - 2016-02-08 16:05 -0800
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-08 18:35 -0800
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-08 19:10 -0800
                Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-08 19:12 -0800
                Re: Java Checked Exception is BAD! Silvio <silvio@internet.com> - 2016-02-11 16:37 +0100
                Re: Java Checked Exception is BAD! Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-02-11 12:00 -0500
                Re: Java Checked Exception is BAD! Silvio <silvio@internet.com> - 2016-02-11 19:01 +0100
                Re: Java Checked Exception is BAD! Sebastian <news@seyweiler.dyndns.org> - 2016-02-11 20:32 +0100
                Re: Java Checked Exception is BAD! Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-02-11 15:20 -0500
                Re: Java Checked Exception is BAD! Silvio <silvio@internet.com> - 2016-02-11 23:53 +0100
                Re: Java Checked Exception is BAD! Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-02-11 18:21 -0500
                Re: Java Checked Exception is BAD! Lew <lewbloch@gmail.com> - 2016-02-11 15:45 -0800
                Re: Java Checked Exception is BAD! Silvio <silvio@internet.com> - 2016-02-12 01:19 +0100
                Re: Java Checked Exception is BAD! Lew <lewbloch@gmail.com> - 2016-02-11 19:18 -0800
                Re: Java Checked Exception is BAD! Sebastian <news@seyweiler.dyndns.org> - 2016-02-12 08:31 +0100
                Re: Java Checked Exception is BAD! Silvio <silvio@internet.com> - 2016-02-12 15:33 +0100
                Re: Java Checked Exception is BAD! Silvio <silvio@internet.com> - 2016-02-12 15:41 +0100
                Re: Java Checked Exception is BAD! Silvio <silvio@internet.com> - 2016-02-12 15:42 +0100
                Re: Java Checked Exception is BAD! Martin Gregorie <martin@address-in-sig.invalid> - 2016-02-08 21:19 +0000
        Re: Java Checked Exception is BAD! Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-02-05 13:00 -0500
  Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-04 15:51 -0800
    Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-04 15:59 -0800
      Re: Java Checked Exception is BAD! boxzou@gmail.com - 2016-02-04 16:03 -0800
    Re: Java Checked Exception is BAD! Eric Douglas <e.d.programmer@gmail.com> - 2016-02-05 05:33 -0800
  Re: Java Checked Exception is BAD! Kevin McMurtrie <mcmurtrie@pixelmemory.us> - 2016-02-04 21:05 -0800
  Re: Java Checked Exception is BAD! ynseo <yeori.seo@gmail.com> - 2016-02-08 01:05 -0800
  Re: Java Checked Exception is BAD! Sebastian <sebastian.millies@softwareag.com> - 2016-02-19 03:43 -0800

csiph-web