这是在Java中创建锁的可接受方式吗?

use*_*108 5 java concurrency multithreading

我遇到了这样的逻辑,即有人在今天的工作中实现了,并且以这种方式创建锁是错误的.你们有更好的解决方案吗?不在myObj上使用synchronized块的问题是它可以为null.还有其他建议吗?

 public class myClass {
    private Object myObj;
    private Object lock = new Object();

    public void method1() {
        synchronized( lock ) {
            // has logic to read myObj
        }
    }


    public void method2()  {
        synchronized( lock ) {
            // has logic to update myObj
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Tud*_*dor 10

看起来适合我.我还要添加final锁定声明以确保它不会无意中被更改:

private final Object lock = new Object();
Run Code Online (Sandbox Code Playgroud)