当前位置: 首页 > 知识库问答 >
问题:

Spring控制器串行同步

章昆琦
2023-03-14
@RestConroller
class MyController {

    MyObject myObject;

    @GetMapping
    synchronized MyObject get() {
        return myObject;
    }

    // Runs in another thread
    void f() {
        for (;;) {
            synchronized {
                myObject.modify();
            }
        }
    }
}

在我看来,将myObject序列化为JSON和f的Spring代码将同时尝试在get()返回时访问myObject。除了返回MyObject的深度副本之外,还有什么方法可以防止这种情况发生吗?

共有1个答案

黄骏喆
2023-03-14

在同步块中使用myobject属性

Synchronized(myobject){},也可以使用任何其他并发锁。此外,如果希望进行深度复制,可以通过对象序列化或json序列化对myobject进行序列化和反序列化。

 类似资料:
  • 问题内容: 我的[基本] Spring Boot应用程序接受来自浏览器的请求,通过发送,并应立即收到响应-例如“ 您的请求已排队 ”。为此,我编写了一个控制器: 本类实现一个接口,是很简单的。它只有一种方法可以执行耗时的任务。我不需要此服务呼叫返回的任何内容,因为无论工作失败还是成功,都会在工作结束时发送一封电子邮件。因此它实际上看起来像: 我以为这样可以,但是浏览器的Ajax请求在返回响应之前等

  • 我的[基本]spring boot应用程序接受来自浏览器的请求,通过发送,并且应该立即收到响应--比如“您的请求已排队”。为了实现这一点,我编写了一个控制器: 类实现了接口,非常简单。它只有一个方法来执行一个耗时的任务。我不需要从这个服务调用返回的任何东西,因为一封电子邮件将在工作结束时传递,无论是失败还是成功的场景。因此它实际上看起来像: 我原以为这会起作用,但浏览器的Ajax请求在返回响应之前

  • 我有看起来像这样的RestController: 我想知道如何将模拟对象传递给其他Controller,后者可以处理数据并将其保存到其他存储库。例如,它可以如下所示: 但我知道这种做法是不允许的。有什么办法可以做到这一点?

  • 我将如何使用Spring执行Apache Beam管道到Google Cloud Dataflow?这个问题类似于在Google Data Flow上的Spring Boot项目中运行Apache Beam管道,但这个问题更关心的是从Spring控制器启动管道,而不是从CommandLineRunner启动管道。 我正在使用Google Cloud Tasks运行这个控制器,使用下面的代码: 编辑

  • FlyControls 启用了一种类似于数字内容创建工具(例如Blender)中飞行模式的导航方式。 你可以在3D空间中任意变换摄像机,并且无任何限制(例如,专注于一个特定的目标)。 例子 misc / controls / fly 构造函数 FlyControls( object : Camera, domElement : HTMLDOMElement ) object: 被控制的摄像机。 d

  • 这个动作被一个LoginController映射,成功登录后,用户回到相同的,但作为登录用户,并用欢迎消息迎接用户。 index.htm还有另一个名为itemform的表单,它允许用户将项目名称作为文本添加。此操作由itemController控制。 我的问题是我的LoginController和itemController都有相同的请求映射,因此我得到了这个错误: 创建名为“org”的bean时