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)。