private static class RunningMutex {}
    private static class ObserveMutex {}

    private static volatile RunningMutex runningMutex = new ImportActionRunningMutex();
    private static volatile ObserveMutex observeMutex = new ImportActionObserveMutex();



    synchronized (observeMutex) {......}  .... (1)
    synchronized (runningMutex) {......}  .....(2)


编写类似上面的代码是一种好习惯吗?我目前正在重构无法正常工作的大代码,我发现了这些行。我想知道上面的代码是否还有其他选择。

最佳答案

当您要在同一个类中彼此隔离不同的锁,或者要在不同的类之间共享相同的锁时,这种情况并非罕见。并非必须为每个不同的锁创建指定的类(可以仅使用不同的Object实例),但是在分析线程转储时它会很有用,因为很清楚哪个线程拥有哪个监视器。

危险是,除非小心,否则可能会创建死锁情况(线程X锁定监视器A,线程Y锁定监视器B,线程X尝试锁定监视器B,线程Y尝试锁定监视器A)。

07-28 04:45