java - 如何同步父类上嵌套的Java类方法?

标签 java multithreading synchronization

我有两个类

public class A {
    private byte[] buf;
    public synchronized void foo() {
        // does something with buf
    }
    public class B {
        public synchronized void bar() {
            // also does something with buf
        }
    }
}

据我所知,方法 bar()在类 B 的实例上同步。如何在类 A 的对象上同步它为了保护buf

最佳答案

如上所述in this answer ,您可以执行以下操作:

public class A {
    private byte[] buf;

    public synchronized void foo() {
        // does something with buf
    }

    public class B {
        public void bar() {
            synchronized (A.this) {
                // also does something with buf
            }
        }
    }
}

这只有效,因为您使用的嵌套类具有对其父类的引用。但是,如果您只想同步变量 buf 的使用,您也可以这样做:

public class A {
    private byte[] buf;

    public void foo() {
        synchronized (buf) {
            // does something with buf
        }
    }

    public class B {
        public void bar() {
            synchronized (buf) {
                // also does something with buf
            }
        }
    }
}

关于java - 如何同步父类上嵌套的Java类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32549555/

相关文章:

java - OrientDB在启动时自动创建数据库

Java:多线程程序中的 java.util.NoSuchElementException?

multithreading - 具有更改优先级功能的优先级队列,它使元素保持有序

c - 为什么 __sync_add_and_fetch 在 32 位系统上对 64 位变量起作用?

java - 错误 : Invalid content was found starting with element 'X' . 应为 '{X}' 之一

java - Android ActionBar 找不到资源

java - 如何加速 Java 中的外部归并排序

c++ - 如何正确增加 C++11 std::atomic?

go - 让 go 例程等待 rabbitMQ 发送结果

android - 具有离线和关系支持的跨平台同步解决方案