Java 如何保护一个方法不受不同请求的影响
我在类a中有一个函数。我从应用程序的三个部分(在不同的活动中)调用这个函数 此功能在我的应用程序中执行关键任务,因此,我希望它仅可用于我应用程序中的其中一个部分(我的意思是,所有3个部分不能同时调用) 我制作了如下函数:Java 如何保护一个方法不受不同请求的影响,java,android,multithreading,synchronization,Java,Android,Multithreading,Synchronization,我在类a中有一个函数。我从应用程序的三个部分(在不同的活动中)调用这个函数 此功能在我的应用程序中执行关键任务,因此,我希望它仅可用于我应用程序中的其中一个部分(我的意思是,所有3个部分不能同时调用) 我制作了如下函数: AnyType foobar(...) { synchronized(this) { doSomething(); } } synchronized是否保证一次只能有一个请求(来自不同类)可以执行函数的代码 因为我从应用程序中的不同活动调
AnyType foobar(...) {
synchronized(this) {
doSomething();
}
}
synchronized
是否保证一次只能有一个请求(来自不同类)可以执行函数的代码
因为我从应用程序中的不同活动调用此函数,在调用此函数的每个地方,我将创建一个类a的新对象
同步是否保护我的功能
这是对象级同步,只允许一个线程对此
对象执行任务
我将制作一个a类的新对象
因此,您将拥有不同的实例,并且您的锁将位于实例级别。假设您创建了两个类A的实例,那么两个线程可以分别处理这两个对象
相反,您应该创建一个对象并锁定它。在您的情况下,更可能使用类级锁(static)
那么我如何保护这个功能呢?将此函数设为静态有帮助吗?
同步(A.class)
将锁定整个类A,直到doSomething()代码>将完成。我说得对吗?@Ehsan不完全正确。您需要了解,对象锁和类级锁是两种不同的东西。若线程持有对象锁,那个么在得到相同的方法之前,并没有其他线程能够访问该方法lock@Ehsan我建议浏览我的一篇老帖子@Ehsan yes。同步块将减少锁的范围。
AnyType foobar(...) {
synchronized(A.class) {
doSomething();
}
}