Package net.i2p.util

Class I2PThread

  • All Implemented Interfaces:
    Runnable
    Direct Known Subclasses:
    DHSessionKeyBuilder.PrecalcRunner, Elg2KeyFactory, I2PAppThread, JobQueueRunner, X25519KeyFactory

    public class I2PThread
    extends Thread
    Preferred over Thread for all router uses. For applications, I2PAppThread is preferred.

    Provides the following features:

    • Logging to wrapper log on unexpected termination in run().
    • Notification of OOM to registered listener (the router), which will cause logging to the wrapper log and a router restart
    • Catching and logging "OOM" caused by thread limit in start() with distinct message, and does not call the OOM listener.
    • As of 0.9.21, initialization to NORM_PRIORITY (not the priority of the creating thread).
    • Method Detail

      • start

        public void start()
        Overridden to provide useful info to users on OOM, and to prevent shutting down the whole JVM for what is most likely not a heap issue. If the calling thread is an I2PThread an OOM would shut down the JVM. Telling the user to increase the heap size may make the problem worse. We may be able to continue without this thread, particularly in app context.
        Overrides:
        start in class Thread
        Since:
        0.9.20
      • run

        public void run()
        Specified by:
        run in interface Runnable
        Overrides:
        run in class Thread
      • addOOMEventListener

        public static void addOOMEventListener​(I2PThread.OOMEventListener lsnr)
        register a new component that wants notification of OOM events
      • removeOOMEventListener

        public static void removeOOMEventListener​(I2PThread.OOMEventListener lsnr)
        unregister a component that wants notification of OOM events