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)
使用上面的代码是一个好习惯吗?我目前正在重构一个无法正常工作的大代码,我发现了这些代码。我想知道是否有上述代码的替代品。
答案 0 :(得分:1)
当您想要在同一个类中彼此隔离不同的锁,或者想要在不同的类之间共享相同的锁时,这不是一种不常见的模式。为每个不同的锁创建指定的类并不是绝对必要的(可能只使用不同的Object实例),但是在分析线程转储时它会有很大的帮助,因为很清楚哪个线程拥有哪个监视器。
危险在于您可以创建死锁情况,除非您小心(线程X锁定监视器A,线程Y锁定监视器B,线程X尝试锁定监视器B,线程Y尝试锁定监视器A)。 / p>