java - Spring控制器序列化同步
问题描述
假设我有一个这样的 Spring 控制器
@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 的深层副本之外,还有其他方法可以防止这种情况吗?
解决方案
在同步块中使用 myobject 属性
Synchronized(myobject) {} 或者您可以使用任何其他并发锁。此外,如果您想要深拷贝,您可以通过对象序列化或 json 序列化来序列化和反序列化 myobject。
也许您可以检查方法同步或块同步。https://www.google.com/amp/s/www.geeksforgeeks.org/method-block-synchronization-java/amp/
推荐阅读
- jenkins - Jenkins:我如何从 SCM 的流水线脚本访问通用 Webhook 触发器参数
- javascript - 交叉口观察者未检测到微小的视口调整
- android - UnityPlayerActivity 使用或覆盖已弃用的 API
- api - 在 REST API 设计中以多种方式处理集合项
- java - JavaFX SwingNode中的Java 2d绘画问题
- java - SpringBoot 2.2.2.RELEASE 中的 IntegrationTest 和 SpringApplicationConfiguration
- android - 为什么我的抽屉在我身后?[扑]
- swift - 如何解决转义闭包捕获 Swift 中的“inout”参数?
- xml - 在 CHOOSE/IF 语句 XSLT 中使用带有 CDATA 标记的值
- google-bigquery - 使用子句时计算 distint