java - 如何保护一种方法免受不同请求的影响

标签 java android multithreading synchronization

我在 A 类中有一个函数。我从我的应用程序的 3 个部分(在不同的 Activity 中)调用这个函数。

此函数在我的应用程序中执行关键任务,因此,我希望我的应用程序中的这些部分之一可以访问它(我的意思是所有 3 个部分,不能同时调用它)

我做了这样的功能:

   AnyType foobar(...) {
    synchronized(this) {
        doSomething();
    }
}

synchronized是否保证同一时间只有一个请求(来自不同的类)可以执行该函数的代码?

因为我在我的应用程序中从不同的 Activity 中调用这个函数,并且在我调用这个函数的每个地方我都会创建一个类 A 的新对象。

最佳答案

does synchronized protect my function?

这是对象级同步,它只允许一个线程在this 对象上执行任务。

I will make a new object of class A

因此,您将拥有不同的实例,并且您的锁将处于实例级别。因此,假设您创建了类 A 的两个实例。因此,两个线程可以分别处理这两个对象。

你应该 avoid using synchronization on this object ,相反,您应该创建一个对象并锁定它。在您的情况下,更有可能使用类级别锁(静态)。

AnyType foobar(...) {
    synchronized(A.class) {
        doSomething();
    }
}

关于java - 如何保护一种方法免受不同请求的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48774450/

相关文章:

java - 在 Talend 中实现我的 Java 程序 : can't Drag & Drop

java - 房间 : @Embedded vs @TypeConverters

java - Java Robot 类是否在自己的线程中运行?

android - 报告 Android 应用程序崩溃

java - 将参数传递给 ScheduleWithFixedDelay 中的运行函数

c++ - 线程 0x7fffc57fa700 (LWP 31671) exited] 在 gdb 中是什么意思?

java - 同时连接到 HSQLDB - 调用永远不会返回

java - 用 Java 求解多项式方程

java - 编辑 JFrame 中的现有图像

Android FCM 与 Azure 通知中心错误 FirebaseInstanceId