複数のスレッドを監視する
マルチスレッドで複数の処理を同時に実行しているのだけれど、全員が正しく動いているのか、待ちやデッドロックになっていないかどうか心配です。
なので、スレッドを定期的に監視するスレッドモニタを作ってみました。
各スレッドの名前と状態を定期的に System.out に出力します。
表示部分や監視周期は状況に応じて変えてください。
public class ThreadMonitor extends Thread {
final long PERIOD = 10*1000L; // 10sec
Thread threadList;
boolean loopflag;
public ThreadMonitor(Thread threadList) {
this.threadList = threadList;
this.loopflag = true;
}
public void requestStop() {
loopflag = false;
}
public void run() {
while (loopflag) {
try { Thread.sleep(PERIOD); } catch (InterruptedException ex) {}
String result = "";
for (int i=0; i<threadList.length; i++) {
Thread t = threadList[i];
result += t.getName() + "=" + t.getState().toString();
}
System.out.println(result);
}
}
}
げっ、役に立った!
いくつかのスレッドがRuntimeExceptionで落ちていやがった。