混淆使用Java中的synchronized:模式还是反模式?

i_a*_*orf 9 java multithreading synchronization synchronized

我正在对我不拥有的Java产品进行代码审查.我不是Java专家,但我强烈怀疑这是毫无意义的,并且表明对同步如何工作的基本误解.

synchronized (this) {
    this.notify();
}
Run Code Online (Sandbox Code Playgroud)

但我错了,因为Java不是我的主要操场.也许有这样做的原因.如果你可以告诉我开发人员的想法,我将不胜感激.

nos*_*nos 10

它当然不是没有意义的,你可以有另一个线程,它包含对包含上述代码的对象的引用

synchronized(foo) {
    foo.wait();
}
Run Code Online (Sandbox Code Playgroud)

为了在事情发生时被唤醒.虽然,在许多情况下,在内部/私有锁定对象上进行同步而不是同步是一种良好的做法this.

但是,在同步块中执行.notify()可能是非常错误的 - 您通常需要做一些工作并在完成时通知,这在正常情况下也需要以原子方式完成其他线程.我们必须看到更多代码来确定它是否真的错了.