如何克服方法在findbugs中调用带有锁定警告的Thread.sleep()?

时间:2016-12-01 05:12:09

标签: java multithreading thread-safety findbugs

我有以下同步方法,用于关闭任务管理器。逻辑是检查活动任务,如果有,我将等待1秒钟,然后再次检查。

但似乎发现bug插件不允许我在synchronized块中使用Thread.sleep()并发出以下警告

  

方法调用Thread.sleep()并保持锁定   此方法调用Thread.sleep()并保持锁定。这可能导致非常差的性能和可伸缩性,或死锁,因为其他线程可能正在等待获取锁。在锁上调用wait()是一个更好的主意,它会释放锁并允许其他线程运行。

关于如何克服这个问题的任何想法?

public synchronized void stop() {

    // try to wait a bit for task shutdown
    for (int i = 0; i < 5; i++) {
        if (activeTaskCount == 0) {
            break;
        }
        try {
            Thread.sleep(1000);
        } catch (InterruptedException ignore) {
        }
    }


    if (activeTaskCount > 0) {
        log.warn("Unable to shutdown all polling tasks of " + jmsConsumerName);
    }

    if (JMSTaskManagerState != STATE_FAILURE) {
        JMSTaskManagerState = STATE_STOPPED;
    }
    log.info("Task manager for jms consumer " + receiveTimeout + " shutdown");
}

0 个答案:

没有答案