Java方法线程安全

标签 java multithreading

我有一个场景,搜索了很多,但没有得到满意的答案。

有一个服务类,WebserviceInvokerService,

class WebserviceInvokerService {
    @Override
    public void synchronized callBackFun() {...}
}

callBackFun ==> 是在事件(某些事件)发生时调用的函数。

在 callBackFun 中,我检查数据库并相应地进行服务调用(该业务中没有涉及该类的实例成员)。

我已使 callBackFun 同步。有可能会创建多个 WebserviceInvokerService 实例,并在这些对象上调用 callBackFun。

我希望跨对象“同步”调用 c​​allBackFun。因此,在这种情况下,callBackFun 的“同步”将有意义。

最佳答案

如果您使用 java 多个实例 WebserviceInvokerServices,方法将在这些实例中的每一个中同步,但不会跨实例。

您可能正在寻找一把锁。

你可以试试这个:

private final static Lock lock = new ReentrantLock();

@Override
public void callBackFun() {
    lock.lock();
    try {
        // Do things here
    } finally {
        lock.unlock();
    }
}

编辑: 添加了 @Wyzard 提到的 final 关键字

关于Java方法线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40204358/

相关文章:

java - java中执行StoredProcedure时出现ArrayIndexOutOfBoundsException

java - 如何混合该方法以便显示所有因素?我还缺少一个因素

java - java中如何将给定的日期转换为年,月,日

java - Java异步HttpClient请求似乎阻塞了主线程?

Java Thread join 创建线程的顺序运行

java - 堆内存消耗超过提交的内存

java - 具有多个范围的托管 Bean

c++ - 性能测量 : time vs tick?

c++ - 可以使用lock_guard采用的互斥锁的锁导致UB吗?

multithreading - Azure 服务 TopicClient 线程安全且可重用吗?