我在 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/