//One Thread method that a supervisor thread may use to monitor another thread is .isAlive(). This method returns true if the thread is still running, and false if it has terminated. A supervisor might continuously poll this value (check it at a fixed interval) until it changes, and then notify the user that the thread has changed state.
import java.time.Instant;
import java.time.Duration;
public class Factorial {
public int compute(int n) {
// the existing method to compute factorials
}
// utility method to create a supervisor thread
public static Thread createSupervisor(Thread t) {
Thread supervisor = new Thread(() -> {
Instant startTime = Instant.now();
// supervisor is polling for t's status
while (t.isAlive()) {
System.out.println(Thread.currentThread().getName() + " - Computation still running...");
Thread.sleep(1000);
}
});
// setting a custom name for the supervisor thread
supervisor.setName("supervisor");
return supervisor;
}
public static void main(String[] args) {
Factorial f = new Factorial();
Thread t1 = new Thread(() -> {
System.out.println("25 factorial is...");
System.out.println(f.compute(25));
});
Thread supervisor = createSupervisor(t1);
t1.start();
supervisor.start();
System.out.println("Supervisor " + supervisor.getName() + " watching worker " + t1.getName());
}
}