У меня есть устаревшее приложение, которое недавно было интегрировано с SonarQube.Строка this.notify ();внутри синхронизированного метода отображается ошибка, которая гласит: «Рефакторинг механизма синхронизации, чтобы не использовать экземпляр потока в качестве монитора» (методы «wait (...)», «notify ()» и «notifyAll ()» не должны бытьвызывается на экземплярах потоков).Я новичок в многопоточности.Кто-нибудь может указать, как решить проблему?Ниже приведен фрагмент кода
public synchronized void shutdown() {
bShutdown = true;
log.info("Shutting down Cleaner.");
this.interrupt();
try {
this.wait(5000); // This line is causing sonar issue.
} catch (InterruptedException ex) {
log.warn("Cleaner shutdown notification received.");
log.debug("Shutdown wait interrupted.", ex);
}
log.info("Cleaner shutdown ready.");
}
У меня также есть переопределенный метод run (), который выглядит примерно так
public void run() {
log.debug("Cleaner thread started.");
bShutdown = false;
while (!bShutdown) {
try {
onWakeUp();
Thread.sleep(frequency * FREQUENCY_TO_MSEC_MULTIPLIER);
} catch (InterruptedException ex) {
log.debug("Cleaner thread Interrupted (probably for shutdown sequence)", ex);`enter code here`
}
}
this.notifyShutdownReady();
}
onWakeUp() method has some cleanup code
public synchronized void notifyShutdownReady() {
this.notify();
}