Continuously re-spawning a stopped/killed thread

Volkan Yazıcı via Concurrency-interest <[email protected]> Mon, 14 Dec 2020 11:24:46 +0100
Newsgroups gmane.comp.java.jsr.166-concurrency
Message-ID <CAP7pH7tmmx1DW4k942drLObeQVaXb6JiKaLuXo+8B6ut+AMK7A@mail.gmail.com>
Hello,

In Log4j, we need to run a background task and keep it alive — unless JVM
is stopped or our *while (!stopped)* condition fails after an interrupt.
That is, if the task fails for some reason (e.g., by means of throwing an
exception, interruption, or *ThreadDeath* due to *Thread#stop()*), it needs
to be re-spawned. What is the most robust/decent way to implement this?

For the records, this is the problem I am dealing with in Log4j:
https://github.com/apache/logging-log4j2/commit/56436ad2176eac000d2821690e4373f097b76670#r44892412

In a nutshell, we have a wrapper running in the background that calls Log4j
*Layout*s to render *LogEvent*s. Though certain layouts can do really
strange things from calling *Thread.currentThread().stop()* to throwing an
*Error*. These cause the wrapper thread to get killed.

I have found work arounds using uncaught exception handlers
<https://howtodoinjava.com/java/multi-threading/restart-thread-uncaughtexceptionhandler/>,
though I couldn't be sure if this is the right way to do it.

Kind regards.

_______________________________________________
Concurrency-interest mailing list
[email protected]
http://cs.oswego.edu/mailman/listinfo/concurrency-interest