Я использую асинхронные функции GPAR для запуска процесса при анализе каждой строки в файле.
Я вижу какое-то странное поведение, которое заставляет меня задаться вопросом, есть ли у меня проблема с безопасностью потоков.
Допустим, у меня есть текущий объект, который загружается значениями из текущей строки во входной электронной таблице, например:
Uploader {
MyRowObject currentRowObject
}
Получив все значения из текущей строки, я запускаю асинхронное замыкание, которое выглядит примерно так:
Closure processCurrentRowObject = { ->
myService.processCurrentRowObject (currentRowObject)
}.asyncFun()
Он определен в том же классе, поэтому имеет доступ к currentRowObject.
Пока он выключен и работает, я анализирую следующую строку и начинаю с создания нового объекта:
MyObject currentObject = new MyObject()
и начните загружать его значениями.
Я предполагал, что это будет безопасно, что асинхронная функция будет указывать на предыдущий объект. Однако мне интересно, потому что я позволяю замыканию привязываться к ссылке, если каким-то образом ссылка обновляется в асинхронной функции, и я, так сказать, вытаскиваю экземпляр объекта из-под него - изменяя его, пока он пытается работать с предыдущим экземпляром.
Если да, какие предложения по исправлению? Или я в безопасности?
Спасибо!