[m-rev.] for review: Use a thread pool to manage threads on the Java backend

Peter Wang novalazy at gmail.com
Wed Jul 30 15:11:08 AEST 2014


On Tue, 29 Jul 2014 21:54:44 +1000, Paul Bone <paul at bone.id.au> wrote:
> On Tue, Jul 22, 2014 at 02:52:03PM +1000, Peter Wang wrote:
> 
> > > diff --git a/java/runtime/MercuryOptions.java b/java/runtime/MercuryOptions.java
> > > new file mode 100644
> > > index 0000000..6f4c099
> > > --- /dev/null
> > > +++ b/java/runtime/MercuryOptions.java
> > > @@ -0,0 +1,72 @@
> > > +//
> > > +// Copyright (C) 2014 The Mercury Team 
> > > +// This file may only be copied under the terms of the GNU Library General
> > > +// Public License - see the file COPYING.LIB in the Mercury distribution.
> > > +//
> > > +
> > > +package jmercury.runtime;
> > > +
> > > +import java.util.List;
> > > +
> > > +/**
> > > + * Process the MERCURY_OPTIONS environment variable.
> > > + */
> > > +public class MercuryOptions {
> > > +    
> > > +    private static MercuryOptions instance;
> > > +
> > > +    /**
> > > +     * Get the singleton instance
> > > +     */
> > > +    public static synchronized MercuryOptions getInstance()
> > > +    {
> > > +        if (instance == null) {
> > > +            instance = new MercuryOptions();
> > > +            instance.process();
> > > +        }
> > > +
> > > +        return instance;
> > > +    }
> > 
> > MercuryThreadPool is already a singleton class so MercuryOptions doesn't
> > need to be a singleton class itself.  You could remove some code.
> 
> What if other things add options to MercuryOptions in the future?

I disagree with adding code "just in case" when it is an internal detail
that we can change freely.

> Or
> parhaps we should introduce a class/make a class responsable for the handles
> of all the singleton objects.

JavaInternal seems to be the place for that.
I think keeping much of the global state together is a good idea.

> > > +                } catch (Throwable e) {
> > > +                    // Some other error occured. bail out.
> > > +                    System.err.println("Uncaught exception: " + e.toString());
> > > +                    System.err.println(e.getMessage());
> > > +                    e.printStackTrace();
> > > +                    System.exit(1);
> > 
> > Hmm, is there a less clean way to leave, like abort() vs exit() in C?
> > 
> 
> AIUI abort() and exit() are just as "unclean" as each other.  Maybe I'm
> misunderstanding what you mean by "clean".  When the program is aborting
> because of a critical error, it's never really going to be "clean".
> 
> Do you want me to change something here?

abort() raises SIGABRT which will be trapped by the debugger or dump a
core file if enabled, and doesn't call atexit handlers or destructors.

I can't find an equivalent for Java so leave it.

Peter



More information about the reviews mailing list