在解析文件中的每一行时,我正在使用 GPAR 异步函数来触发进程。
我看到一些奇怪的行为,这让我想知道我是否有线程安全问题。
假设我有一个当前对象正在加载输入电子表格中当前行的值,如下所示:
Uploader {
MyRowObject currentRowObject
}
一旦它具有当前行中的所有值,我就会启动一个看起来有点像这样的异步闭包:
Closure processCurrentRowObject = { ->
myService.processCurrentRowObject (currentRowObject)
}.asyncFun()
它在同一个类中定义,因此它可以访问 currentRowObject。
当它关闭并运行时,我解析下一行,并从创建一个新对象开始:
MyObject currentObject = new MyObject()
并开始用值加载它。
我认为这是安全的,异步函数将指向前一个对象。但是,我想知道是否因为我让闭包绑定到引用,如果以某种方式在异步函数中更新了引用,并且我正在从它下面拉出对象实例,可以这么说 - 在它尝试时更改它处理前一个实例。
如果是这样,有什么修复建议吗?还是我安全?
谢谢!