将类对象作为同步变量

时间:2011-05-23 06:06:02

标签: java multithreading asynchronous thread-safety

    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)

使用上面的代码是一个好习惯吗?我目前正在重构一个无法正常工作的大代码,我发现了这些代码。我想知道是否有上述代码的替代品。

1 个答案:

答案 0 :(得分:1)

当您想要在同一个类中彼此隔离不同的锁,或者想要在不同的类之间共享相同的锁时,这不是一种不常见的模式。为每个不同的锁创建指定的类并不是绝对必要的(可能只使用不同的Object实例),但是在分析线程转储时它会有很大的帮助,因为很清楚哪个线程拥有哪个监视器。

危险在于您可以创建死锁情况,除非您小心(线程X锁定监视器A,线程Y锁定监视器B,线程X尝试锁定监视器B,线程Y尝试锁定监视器A)。 / p>