Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何保护一个方法不受不同请求的影响_Java_Android_Multithreading_Synchronization - Fatal编程技术网

Java 如何保护一个方法不受不同请求的影响

Java 如何保护一个方法不受不同请求的影响,java,android,multithreading,synchronization,Java,Android,Multithreading,Synchronization,我在类a中有一个函数。我从应用程序的三个部分(在不同的活动中)调用这个函数 此功能在我的应用程序中执行关键任务,因此,我希望它仅可用于我应用程序中的其中一个部分(我的意思是,所有3个部分不能同时调用) 我制作了如下函数: AnyType foobar(...) { synchronized(this) { doSomething(); } } synchronized是否保证一次只能有一个请求(来自不同类)可以执行函数的代码 因为我从应用程序中的不同活动调

我在类a中有一个函数。我从应用程序的三个部分(在不同的活动中)调用这个函数

此功能在我的应用程序中执行关键任务,因此,我希望它仅可用于我应用程序中的其中一个部分(我的意思是,所有3个部分不能同时调用)

我制作了如下函数:

   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();
    }
}