final class ThreadMonitor
extends java.lang.Object
implements java.lang.Runnable
This works by sleeping until the specified timeout amount and then interrupting the thread being monitored. If the
thread being monitored completes its work before being interrupted, it should interrupt()
the monitor
thread.
Duration timeout = Duration.ofSeconds(1); try { Thread monitor = ThreadMonitor.start(timeout); // do some work here ThreadMonitor.stop(monitor); } catch (InterruptedException e) { // timed amount was reached }
Modifier and Type | Field and Description |
---|---|
private java.lang.Thread |
thread |
private java.time.Duration |
timeout |
Modifier | Constructor and Description |
---|---|
private |
ThreadMonitor(java.lang.Thread thread,
java.time.Duration timeout)
Constructs a new monitor.
|
Modifier and Type | Method and Description |
---|---|
void |
run()
Sleeps until the specified timeout amount and then interrupt the thread being monitored.
|
(package private) static java.lang.Thread |
start(java.time.Duration timeout)
Starts monitoring the current thread.
|
(package private) static java.lang.Thread |
start(java.lang.Thread thread,
java.time.Duration timeout)
Starts monitoring the specified thread.
|
(package private) static void |
stop(java.lang.Thread thread)
Stops monitoring the specified thread.
|
private final java.lang.Thread thread
private final java.time.Duration timeout
private ThreadMonitor(java.lang.Thread thread, java.time.Duration timeout)
thread
- The thread to monitor.timeout
- The timeout amount.static java.lang.Thread start(java.time.Duration timeout)
timeout
- The timeout amount. or no timeout if the value is zero or less.null
if the timeout amount is not greater than zero.static java.lang.Thread start(java.lang.Thread thread, java.time.Duration timeout)
thread
- The thread to monitortimeout
- The timeout amount. or no timeout if the value is zero or less.null
if the timeout amount is not greater than zero.static void stop(java.lang.Thread thread)
thread
- The monitor thread, may be null
.public void run()
run
in interface java.lang.Runnable
Runnable.run()