我正在阅读 Apache Procrun 教程,并遇到了服务的启动和停止方法的以下实现。
public static void start(String[] args) {
startThread();
synchronized (loggerThread) {
try {
loggerThread.wait();
} catch (InterruptedException e) {
log("'Wait' interrupted: " + e.getMessage());
}
}
}
public static void stop(String[] args) {
if (loggerThread != null) {
log("Stopping the thread");
loggerThread.interrupt();
synchronized (loggerThread) {
loggerThread.notify();
}
} else {
log("No thread to interrupt");
}
}
private static void startThread() {
log("Starting the thread");
loggerThread = new Thread(new RandomLoggerService());
loggerThread.start();
}
当调用 start 方法时,它会调用“startThread”方法,该方法将创建一个新线程,并且其“run”方法实现中的任何内容都将开始执行。但是为什么“loggerThread”会同步,为什么要等待呢?当我调用 stop 方法时,它应该通知 start 方法中的等待。那么为什么执行逻辑又被 stop 方法交给了 start 方法呢?这有点混乱,请指教。